g ++链接与Visual C ++链接

时间:2012-09-14 01:44:25

标签: c++ g++ static-linking

我一直试图让它工作一段时间,我无法在别处找到答案,这是我的问题。

当我在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的静态库设置。

2 个答案:

答案 0 :(得分:1)

使用Microsoft的编译器,头文件中可以包含库依赖信息(源文件也是如此,但这通常在头文件中完成);这会被编译到目标文件中,链接器会理解并应用该信息。这可能很方便:您不必记住冗长,时髦的名称,如果您使用不兼容的选项编译两个源文件,您可能会遇到链接器会抱怨的库名冲突。大多数编译器和链接器都不会执行此类操作,您必须明确告诉链接器您要链接哪些库。

答案 1 :(得分:0)

静态库不与其他库静态链接。听起来不错吗? 但是,您可以使用名为ar的工具打包许多目标文件。

在Windows上发生的事情可能是因为你在系统环路径中的某个地方有(SDL,opengl32)dll。