g++链接与VisualC++链接

g++ Linking vs VisualC++ Linking

本文关键字:链接 VisualC++ g++      更新时间:2023-10-16

我已经尝试了一段时间,但在其他地方找不到答案,这是我的问题。

当我在Visual C++中创建一个静态库时,该库使用的任何依赖项都会被携带到我链接该库的可执行程序中

Test.lib取决于-SDL-OpenGL

TestApp.exe链接Test.lib

在Visual C++中,我不必在我的TestApp可执行文件中添加Test.lib的依赖项,它们会被继承,而且效果很好。

然而,当我将代码移植到Linux g++(使用code::Blocks IDE)时,如果我在g++中创建了一个静态库,即.a,并且我创建了链接该库的TestApp,它会获得对依赖项的未定义引用。

g++能做到这一点吗?如果能,我缺少什么来将依赖项转移到我的可执行文件中?

至于我的库设置,我只是使用IDE的静态库设置。

使用Microsoft的编译器,头文件中可以包含库依赖信息(源文件也是,但这通常在头文件中完成);它被编译到对象文件中,链接器理解并应用这些信息。这很方便:你不必记住又长又时髦的名字,如果你用不兼容的选项编译两个源文件,你可能会遇到链接器会抱怨的库名冲突。大多数编译器和链接器都不做这种事情,并且必须明确地告诉链接器要链接到哪些库。

静态库不会与其他库静态链接。听起来对吗?但是,您可以使用名为ar.的工具将许多对象文件打包在一起

在windows上发生的情况可能是因为在系统环境路径中的某个位置有(SDL,opengl32)dll。