我想使用其他几个DLL链接DLL但是无法让它们正确解析:
$ g++ -o libsuba.dylib -dynamiclib -Wl,-install_name,@rpath/libsuba.dylib suba.cpp
$ g++ -o liba.dylib -dynamiclib -Wl,-install_name,@rpath/liba.dylib -Wl,-reexport_library,libsuba.dylib a.cpp
上面给出了两个库,liba.dylib和libsuba.dylib。
$ otool -l liba.dylib
...
Load command 10
cmd LC_REEXPORT_DYLIB
cmdsize 48
name @rpath/libsuba.dylib (offset 24)
time stamp 2 Wed Dec 31 18:00:02 1969
current version 0.0.0
compatibility version 0.0.0
...
在另一个目录中,我想现在链接liba.dylib:
$ cd build
$ c++ -o b b.cpp ../liba.dylib -Wl,-rpath,..
ld: file not found: @rpath/libsuba.dylib for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
然而,这有效:
$ c++ -o b b.cpp ../liba.dylib -L..
有人可以解释为什么显式链接器rpath选项不能替换@rpath宏并允许重新导出的库被定位吗?