【发布时间】:2016-11-29 13:21:12
【问题描述】:
为了简单起见...假设我有以下内容:A.lib、libB.so(使用 A.lib)和 C.exe(使用 libB.so)。注意:这是 Linux,而不是 Windows。我只是使用 .exe 来传达二进制类型/目的。
我只是想从命令提示符编译和链接 C.exe,因为它只是一个简单的测试程序。这是我正在使用的线路:
g++ -I../include C.cpp -o C.exe -L../lib -lB
结果是对 A.lib 中的事物的许多未定义引用。引用从 libB.so 导出的任何内容都没有错误。
如果我将 libB.so 复制到同一目录并使用此命令:
g++ -I../include C.cpp -o C.exe -lB
结果是C.exe构建完成,可以正常运行。
一旦构建了 libB.so,我就不需要用于构建它的库。尽管如此,我想我会尝试一些作为最后的尝试。我将 A.lib 复制到与 libB.so 相同的 lib 目录中,并再次尝试了原始构建命令。结果是一样的。
感谢所有想法。
【问题讨论】:
-
你是如何链接
libB.so的?您是否明确链接到A.lib? -
使用
-R选项,除了-L。有关详细信息,请参阅ld的手册页。 -
顺便问一下,
A库是静态库还是动态库? -
@Some 程序员老兄 - 很抱歉不清楚。 A.lib 是静态的并与 libB.so 显式链接。
-
@SamVarshavchik - 是的,解决了它。谢谢!
标签: c++ linux g++ shared-libraries