【问题标题】:undefined references when linking own static library that itself depends on static libraries链接本身依赖于静态库的自己的静态库时未定义的引用
【发布时间】:2014-02-06 02:28:35
【问题描述】:

我编写了一个依赖于其他静态库的静态库(在 Windows 7 for x64 中使用 TDM-gcc 4.8.1 编译)。提升库(语言环境和系统)要具体。 由于我正在构建一个静态库,因此我假设我所依赖的库会自动包含在我的最终 .a 中,特别是因为我在我的代码中使用了它们。

但是,当我尝试构建一个静态链接到上述库的可执行文件时,仍然存在对某些 boost 部件的未定义引用,这些部件肯定在我的库中使用。

有没有办法解决这个问题?

非常感谢任何帮助。谢谢

编辑: 我还不够小心,因为我现在知道导致问题的原因。我正在使用代码块,并且构建档案的所有必要参数都在项目属性中声明。但是在构建我的库时,代码块甚至不会调用链接器。相反,它调用 ar.exe 并传递我项目的所有目标文件。这样,就不会包含任何外部库。所以,我太想告诉代码块以正确的方式构建库..

【问题讨论】:

    标签: c++ gcc mingw static-linking


    【解决方案1】:

    您的可执行文件需要链接到所有相关的库,包括它直接依赖的库,以及它间接依赖的库。链接静态库时,通常不会在其中嵌入其他静态库。

    【讨论】:

    • 感谢您的意见。嗯,我的印象是我遇到了几个项目,其中外部库以某种方式包含在他们提供的库中。但我在这里可能错了。一般来说,有没有办法在我自己的库中包含第三方库?
    • 并非如此。有关详细信息,请参阅stackoverflow.com/questions/2157629/…。您可以编写一个工具来将您依赖的库重新分解为目标文件(使用ar,与最初构建静态库的程序相同)。然后,您可以将生成的对象链接到更高级别的库中。但这并不是任何人真正会做的事情,你可能也不应该这样做。
    • 好的,我明白了。那么回到一次链接所有依赖项。谢谢你的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    相关资源
    最近更新 更多