gpt4 book ai didi

gcc - rpath=$ORIGIN 没有预期的效果?

转载 作者:行者123 更新时间:2023-12-03 11:46:40 27 4
gpt4 key购买 nike

我有一个二进制“CeeloPartyServer”,它需要在运行时在 FreeBSD 机器上找到 libFoundation.so。它们都在同一个目录中。我编译(在另一个平台上,使用交叉编译器)CeeloPartyServer 使用链接器标志 -rpath=$ORIGIN .

> 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。我错过了什么?

最佳答案

我假设您正在使用 gcc 和 binutils。

如果你这样做

readelf -d CeeloPartyServer | grep ORIGIN

你应该找回你在上面找到的 RPATH 行,但你也应该看到一些关于标志的条目。以下来自我构建的库。
0x000000000000000f (RPATH)              Library rpath: [$ORIGIN/../lib]
0x000000000000001e (FLAGS) ORIGIN
0x000000006ffffffb (FLAGS_1) Flags: ORIGIN

如果您没有看到某种 FLAGS 条目,您可能没有告诉链接器将对象标记为需要原始处理。使用 binutils ld,您可以通过传递 -z origin 来做到这一点。旗帜。

我猜你正在使用 gcc 来驱动链接,所以在这种情况下,你需要通过添加 -Wl,-z,origin 来通过编译器传递标志。到您的 gcc 链接行。

关于gcc - rpath=$ORIGIN 没有预期的效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6324131/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com