共享库:&#34;自我依赖&#34;和`g ++ -shared -o <path>`?</path>

时间:2014-08-03 20:17:14

标签: c++ c gcc clang dynamic-linking

我使用以下命令链接目标文件(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)
    ...

我的问题是:

  1. -o是否具有影响&#34;自我依赖性的副作用?生成的共享库与-shared一起使用?

  2. 为什么共享库有依赖关系指向自身? (我在/usr/local/lib中查找了一些共享库以供参考,它们都有绝对路径作为依赖项。)

  3. -o选项而言,生成共享库时最佳做法是什么?使用-o的绝对路径?

0 个答案:

没有答案