sol*_*tim 5 c c++ gcc shared-libraries
让我解释一下这个场景.我们有一个遗留的C++编译的.so库.此库中的函数是使用声明的extern "c" {},因此C和C++程序都可以使用该库,并且由于某种原因它是使用--static-libgcc选项创建的.
这个旧图书馆很旧,很难维护.现在我们已经设法写了它的替代,但是用C语言编写.假设旧库名为libfoo.so(旧),新库名为libfoo.so(新).对于给定的bar.o,它可以与旧的或新的libfoo.so链接以创建可执行文件,例如bar.exe.但是bar.exe只能运行它之前链接的相同.so库,换句话说,这两个库不能互换.
编辑#1:我创建了一个名为libfoo.so的符号链接,指向libfoo.so(旧)或libfoo.so(新).此符号链接libfoo.so在运行时位于LD_LIBRARY_PATH中.
编辑#2:当我将bar.o与旧的libfoo.so链接并生成bar.exe时,如果我使用新的libfoo.so运行此bar.exe,则报告错误为undefined symbols.通过nm这两个libfoo.so,我可以在旧的符号中找到这些符号,但不能在新的符号中找到.符号类似于_ZSt4cerr,这是一个C++ lib损坏的名称(虽然它是由它带来的--static-libgcc),当然新的libfoo.so不包含那种符号.
编辑#3:如果我只是使用g ++而不是gcc编译和链接C代码,它是否有意义?
我该如何实现呢?
编辑#4:今天我设法使用g ++(使用静态libgcc,静态libstdc ++)编译/链接新的C编程libfoo,这可能导致所有c ++符号都包含在libfoo.so中.这可以使一切运行顺利,但不是我真正想要的.