问题
如何在加载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`