将两个共享库链接在一起 - 未定义的符号引用

时间:2014-07-21 11:42:43

标签: c gcc linker ld symbols

我有两个共享库libA和libB,我想创建一个新库libC,它链接到两个库,所以我可以用-lC而不是-lA和-lB链接我的应用程序。 我不能使用-lA和-lB,因为我必须修复许多包。

libB是预编译的二进制文件。

我试图运行这个:

gcc -fPIC -shared -o libA.so A.c
gcc -shared -Wl,--no-as-needed -L. -lA -lB -o libC.so

但是当我链接我的应用程序时,需要libB和-lC I

App.o: undefined reference to symbol 'SymbolInB'

note: 'SymbolInB' is defined in DSO libB.so请尝试将其添加到链接器命令行

libB.so: could not read symbols: Invalid operation

如果我运行readelf -a libB.so我在.dynsym中看到了SymbolInB,它在libC.so中丢失了。所以我假设我错过了一个正确解析符号的链接选项?

1 个答案:

答案 0 :(得分:2)

它不起作用。 libC中的函数可以使用libAlibB中的函数,因为libC与其他库链接。但是,来自libAlibB的符号不会从libC导出,因此如果您的应用程序直接使用libB中的函数,则需要与{{{}}链接1}}。