我有两个共享库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中丢失了。所以我假设我错过了一个正确解析符号的链接选项?
答案 0 :(得分:2)
它不起作用。 libC
中的函数可以使用libA
和libB
中的函数,因为libC
与其他库链接。但是,来自libA
和libB
的符号不会从libC
导出,因此如果您的应用程序直接使用libB
中的函数,则需要与{{{}}链接1}}。