假设您正在开发共享库libshared.so
。
您有一个静态库libstatic.a
,其中包含您需要的一些内部类和功能。您想将其链接到.so
,如下所示:
g++ -o libshared.so -shared myObj.o -lstatic
你还有一个executable.sh
将使用你的.so
并在运行时动态打开它
dlopen("libshared.so", RTLD_NOW)
您知道此可执行文件与libstatic.a
静态链接(但您不确定该库的版本与您的版本完全相同)。
当您知道libshared.so
中已使用相同的库时,将libstatic.a
与executable.sh
静态链接是否安全无误?
答案 0 :(得分:0)
您应该避免将静态库链接到共享库。
因为共享库应该有position independent code(否则,动态链接器必须执行过多的重定位,并且您失去了共享库的好处),但静态库通常没有PIC。
阅读Drepper's paper: How to write a shared library
使用
构建库 g++ -Wall -O -fPIC mySrc.cc -c -o myObj.pic.o
g++ -o libshared.so -shared myObj.pic.o -lotherlib