【发布时间】:2011-09-13 12:37:56
【问题描述】:
我有一个二进制“CeeloPartyServer”,它需要在运行时在 FreeBSD 机器上找到 libFoundation.so。它们都在同一个目录中。我使用链接器标志 -rpath=$ORIGIN 编译(在另一个平台上,使用交叉编译器)CeeloPartyServer。
> readelf -d CeeloPartyServer |grep -i rpath
0x0000000f (RPATH) Library rpath: [$ORIGIN]
> ls
CeeloPartyServer Contents Foundation.framework libFoundation.so
> ./CeeloPartyServer
/libexec/ld-elf.so.1: Shared object "libFoundation.so" not found, required by "CeeloPartyServer"
为什么我尝试运行它时找不到库?
我的确切链接器行是:-lm -lmysql -rpath=$ORIGIN。
我很确定我不必转义 $ 或类似的东西,因为我的 readelf 分析确实表明库 rpath 设置为 $ORIGIN。我错过了什么?
【问题讨论】:
-
另见A description of RPATH $ORIGIN LD_LIBRARY_PATH and portable linux binaries。文章使用
XORIGIN/../lib在头部预留空间,然后使用chrpath改为$ORIGIN/../lib,避免引用问题。你可能还想要-Wl,--enable-new-dtags。