rpath = $ ORIGIN没有达到预期的效果?
|
我有一个二进制文件“ CeeloPartyServer”,需要在FreeBSD机器上的运行时找到libFoundation.so。它们都在同一目录中。我使用链接程序标记\“-rpath = $ ORIGIN \”编译(在另一个平台上,使用交叉编译器)CeeloPartyServer。
> readelf -d CeeloPartyServer | grep -i rpath
0x0000000f(RPATH)库rpath:[$ ORIGIN]
> ls
CeeloPartyServer Contents Foundation.framework libFoundation.so
> ./CeeloPartyServer
/libexec/ld-elf.so.1:找不到共享对象\“ CeeloPartyServer \”所需的对象\“ libFoundation.so \”
当我尝试运行它时,为什么找不到库?我的确切链接器行是:-lm -lmysql -rpath = $ ORIGIN。我很确定我不必转义\\ $或类似的东西,因为我的readelf分析确实表明库rpath设置为$ ORIGIN。我想念什么?
没有找到相关结果
已邀请:
3 个回复
恋卡
您应该返回上面找到的RPATH行,但是您还应该看到一些有关标志的条目。以下是我构建的库中的内容。
如果没有看到某种FLAGS条目,则可能没有告诉链接器将对象标记为需要进行原点处理。使用binutils ld,您可以通过传递
标志来实现。 我猜您正在使用gcc驱动链接,因此在这种情况下,您需要通过在gcc链接行中添加
来通过编译器传递标志。
暑袜眠退
甚至
。当
显示看起来像
或类似的RPATH标头时,您将知道它正确。多余的$和反斜杠只是为了防止$被链中其他工具处理。
臂哦