使用内置的静态库创建一个exe文件

3

我有一个使用openCV创建的项目,作为eclipse(MinGW / Windows 8操作系统)下的Makefile应用程序。我需要创建一个可执行文件,这样在其他没有安装openCV的电脑上运行应用程序时就不需要任何其他dll。

我还将openCV源代码编译为静态库。这是我的Makefile(草稿)的样子:

all:    
    gcc -static -I"C:\opencv\build\include" -L"lib" main.c -lws2_32 -lopencv_core244.dll -lopencv_highgui244.dll -lopencv_imgproc244.dll -o bcast.exe

构建后的可执行文件不包含库。我做错了什么?
提前感谢。
1个回答

1

您需要链接*.lib文件,而不是*.dll动态链接库)。

因此,正确的做法是:

g++ -I"C:\opencv\build\include" -L"lib" main.c -lws2_32 -lopencv_core244.lib -lopencv_highgui244.lib -lopencv_imgproc244.lib -o bcast.exe

你应该考虑使用 g++,它是一个 C++ 库。之后,你的 makefile 将会生成 1 个 .exe 文件,没有任何库。

说实话,你真的重新编译了 OpenCV 库静态链接吗(使用 -DBUILD_SHARED_LIBS=OFF)?我有些怀疑。


我的意思是exe文件中没有包含任何库。 我会再试一次重新编译openCV。 - milu
我按照您的指示操作,但在编译openCV应用程序时出现错误: g++ -static "-LC:\MinGW\lib" "-LC:\opencv\build\x86\mingw_static\lib" -static-libgcc -static-libstdc++ -o qwasegf.exe main.o -lws2_32 -lopencv_core248 -lopencv_highgui248 -lopencv_imgproc248 C:\opencv\build\x86\mingw_static\lib\libopencv_core248.a(persistence.cpp.obj): 在部分'.text$_ZL6icvEofP13CvFileStorage'中,重定位地址0x40无效。 c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: 最终链接失败:无效操作。 - milu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接