1

我一直试图让它工作一段时间,但无法在其他地方找到答案,这是我的问题。

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

4

2 回答 2

1

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

于 2012-09-14T12:14:55.523 回答
0

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

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

于 2012-09-14T01:57:00.333 回答