在另一个静态库中链接静态库
Posted
技术标签:
【中文标题】在另一个静态库中链接静态库【英文标题】:Link static library in another static library 【发布时间】:2012-08-30 13:41:43 【问题描述】:我需要将 Abaqus ODB C++ API 静态库链接到另一个静态库中。我可以让它“工作”,但我收到很多链接器警告。所有警告都是 LNK4006 和 LNK4221,并且与 API 库有关。
我想在主项目中链接生成的静态库。当我这样做时,应用程序会启动并给我一条消息,例如The application was unable to start correctly 0xc000007b.
如果不清楚:
API Lib
-> MyProj Lib
-> MainProj
请看下面 Paul 的回答。您不能像这样嵌套静态库,如果您认为需要,则需要了解有关链接阶段的更多信息。相反,主项目需要链接两个依赖的静态库。
【问题讨论】:
【参考方案1】:您不能“在库中包含库”。您将这两个库链接到您的应用程序,这显然是您已经完成的。您只需要遵循 c++ 程序的一般规则:只允许使用一种符号定义,并且您需要防止潜在的名称冲突。
【讨论】:
所以我可以在主项目中包含两个库,即使一个依赖于另一个?我了解只允许对符号进行一种定义。 API 库是罐装的。 不,您必须将这两个库链接到由您的主项目产生的程序。在 VS 中,您创建一个“可执行”项目类型并将两个库设置为“引用”。MyProj Lib
依赖于API Lib
。我可以在MainProj
中链接它们,但是当我去构建MyProj Lib
时这将如何工作?
当MyProj Lib
被编译时,它(或编译器/图书馆员)不需要知道API Lib
的符号在哪里。它只需要知道它们已被声明。当链接MainProj Exe
时,链接器需要这些符号。以上是关于在另一个静态库中链接静态库的主要内容,如果未能解决你的问题,请参考以下文章
VS编译linux项目生成静态库并在另一个项目中静态链接的方法