我使用以下命令链接目标文件(hello.o
)以生成共享库(libhello.so
):
g++ -fPIC -shared -o build/lib/libhello.so build/obj/src/hello.o
我在OS X上,g++
实际上指向了clang++
。
然后当我使用
检查libhello.so
的依赖关系时
otool -L build/lib/libhello.so
输出的前两行是
build/lib/libhello.so:
build/lib/libhello.so (compatibility version 0.0.0, current version 0.0.0)
...
这意味着任何依赖libhello.so
的程序都必须使用此相对路径引用libhello.so
。 (我已使用与libhello.so
链接的测试程序对此进行了验证。)
我的想法是-o
选项的值被设置为生成的.so
文件的依赖项之一,因为如果我使用:
g++ -fPIC -shared -o /<absolute_path>/build/lib/libhello.so build/obj/src/hello.o
otool
打印:
build/lib/libhello.so:
/<absolute_path>/build/lib/libhello.so (compatibility version 0.0.0, current version 0.0.0)
...
我的问题是:
-o
是否具有影响&#34;自我依赖性的副作用?生成的共享库与-shared
一起使用?
为什么共享库有依赖关系指向自身? (我在/usr/local/lib
中查找了一些共享库以供参考,它们都有绝对路径作为依赖项。)
就-o
选项而言,生成共享库时最佳做法是什么?使用-o
的绝对路径?