C++ 静态链接未定义参考(CMAKE/MinGW)

C++ 静态链接未定义参考(CMAKE/MinGW),c++,mingw,static-linking,C++,Mingw,Static Linking,我正在尝试使用带有静态链接的MinGW构建示例MathGL项目。 我已经将Zlib和PNGlib构建为静态libs(我认为Zlib在默认情况下是静态的,并从PNGlib makefile中删除了“共享安装”规则),并且在我的C:/mingw32/lib中获得了libz.a和libpng.a文件 MathGL提供了CMAKE文件,该文件找不到这些库,因此我使用ZLIB_LIBRARY=等运行了CMAKE,并成功地构建了它 因此,我有3个文件: libmgl.dll libmgl.dll.a li

我正在尝试使用带有静态链接的MinGW构建示例MathGL项目。 我已经将Zlib和PNGlib构建为静态libs(我认为Zlib在默认情况下是静态的,并从PNGlib makefile中删除了“共享安装”规则),并且在我的C:/mingw32/lib中获得了libz.a和libpng.a文件

MathGL提供了CMAKE文件,该文件找不到这些库,因此我使用ZLIB_LIBRARY=等运行了CMAKE,并成功地构建了它

因此,我有3个文件:

  • libmgl.dll
  • libmgl.dll.a
  • libmgl.a
并编译示例:
g++main.cpp-IC:/mingw32/include-LC:/mingw32/lib-lmgl
它可以工作,但需要所有mingw.dll和libmgl.dll

如果我为上一个命令提供了
-static
,则会出现错误:

$ g++ main.cpp -IC:/mingw32/include -static -LC:/mingw32/lib -lmgl
C:\Users\stjfk\AppData\Local\Temp\ccyoT7RU.o:main.cpp:(.text$_ZN8mglGraphC1Eiii[__ZN8mglGraphC1Eiii]+0xa): undefined reference to `_imp___ZTV8mglGraph'
C:\Users\stjfk\AppData\Local\Temp\ccyoT7RU.o:main.cpp:(.text$_ZN8mglGraphC1Eiii[__ZN8mglGraphC1Eiii]+0x2f): undefined reference to `_imp__mgl_create_graph_gl'
C:\Users\stjfk\AppData\Local\Temp\ccyoT7RU.o:main.cpp(.text$_ZN8mglGraphC1Eiii[__ZN8mglGraphC1Eiii]+0x4d): undefined reference to `_imp__mgl_create_graph'
C:\Users\stjfk\AppData\Local\Temp\ccyoT7RU.o:main.cpp:(.text$_ZN8mglGraphD1Ev[__ZN8mglGraphD1Ev]+0xa): undefined reference to `_imp___ZTV8mglGraph'
C:\Users\stjfk\AppData\Local\Temp\ccyoT7RU.o:main.cpp:(.text$_ZN8mglGraphD1Ev[__ZN8mglGraphD1Ev]+0x28): undefined reference to `_imp__mgl_use_graph'
...
collect2.exe: error: ld returned 1 exit status

为什么我不能链接所有静态库?.a文件是否表示静态库?

有两种类型的库,
import
static
。你到底给了什么样的图书馆?
import
库只包含所调用函数的“存根”(通常实际函数在DLL中实现)。静态库包含所调用函数的实际代码。那是哪一个呢?该错误表明您是在假设一个
导入
库(前缀
\u imp\u
表明了这一点)进行编译的。Paul,我认为您是对的,但是dll.a文件代表什么?我以为是导入lib和.a是静态的。如果我直接向g++提供.a文件,也会出现同样的错误。不要担心DLL。构建应用程序。当应用程序运行时,将通知您缺少DLL(如果缺少)。现在,您的应用程序是在假设导入库用于指定缺少的函数的情况下构建的。您必须将导入库添加到链接器设置中。我使用libmgl.dll.a链接并写入了-static标志。它可以编译和运行,但需要libmgl.dll和所有MinGW lib。我知道mathgl没有静态库,但我可以将所有mingw内容链接为静态库吗?