共享库使用另一个共享库的不同版本到主可执行文件?

时间:2017-11-14 11:30:55

标签: c++ linux linker shared-libraries

问题

  • 说我有一个Linux可执行MAIN,它使用旧版本的某个共享库LIB.so(它使用LD_LIBRARY_PATH定位)。
  • 我喜欢MAIN也使用我的库MYLIB.so,除了它使用更新版本的LIB.so。
  • MAIN和MYLIB.so都使用两个版本的LIB.so中出现的具有相同名称(但实现不同)的函数。

如何在加载MYLIB.so时让应用程序也加载新版本的LIB.so?

似乎无法正常工作

我尝试使用指向新版本库的RPATH选项编译MYLIB.so。但是,虽然这在运行ldd MYLIB.so时正确识别了较新的库,但是当应用程序运行时,它只使用旧的库实现。

我的编译(为清晰起见使用单个文件玩具实现)如下:

# compile old library implementation
g++ -c -Wall -Werror -fpic library_old.cpp 
g++ -shared -o liblib.so library_old.o

# compile new library implementation
g++ -c -Wall -Werror -fpic library_new.cpp 
g++ -shared -o new/liblib.so library_new.o

# compile my library against new liblib
g++ -c -Wall -Werror -fpic my_library.cpp
g++ -L`pwd`/new -shared -Wl,-rpath,`pwd`/new -o libmine.so my_library.o -llib

# compile application against old liblib
g++ -L`pwd` -Wall -Werror -o main main.cpp -llib -lmine
export LD_LIBRARY_PATH=`pwd`

0 个答案:

没有答案