C 将两个共享库链接在一起-对符号的未定义引用
我有两个共享库libA和libB,我想创建一个新的库libC,它链接到这两个库,这样我就可以将我的应用程序链接到-lC而不是-lA和-lB。 我不能使用-lA和-lB一个,因为否则我必须修复许多包 libB是一个预编译的二进制文件 我试着运行这个:C 将两个共享库链接在一起-对符号的未定义引用,c,gcc,linker,ld,symbols,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和-lci App.o: unde
gcc -fPIC -shared -o libA.so A.c
gcc -shared -Wl,--no-as-needed -L. -lA -lB -o libC.so
但是当我链接我的应用程序时,需要libB和-lci
App.o: undefined reference to symbol 'SymbolInB'
注意:“symbolnb”是在DSO libB中定义的。因此
请尝试将其添加到链接器命令行
libB.so: could not read symbols: Invalid operation
如果我运行
readelf-a libB.so
我在.dynsym中看到符号nb,它在libC.so中丢失。因此,我假设我错过了一个正确解析符号的链接选项?它不是这样工作的。libC
中的函数可以使用libA
和libB
中的函数,因为libC
与其他库链接。但是,来自libA
和libB
的符号不是从libC
导出的,因此如果您有一个直接使用libB
函数的应用程序,那么您需要链接到libB
,谢谢您的回复。因此,我正在考虑为libB
中的每个函数编写包装函数(在libC
)。这种方法行得通吗?@user3860311是的,它会行得通,但它不仅仅是与其他库链接,而且会引入更多错误或问题的来源。例如,考虑一下如果libB
中的函数发生了更改,但您忘记更改包装器,会发生什么情况?是的,这就是我希望避免使用此类包装器的原因。我试图实现的是:libB
是一个专有的EGL库,它缺少一些函数libA
实现这些功能libC
由两个库组成,并重命名为libB
,因此任何应用程序都可以使用libB
+缺少的函数。有没有其他方法可以做到这一点?