【发布时间】:2017-02-10 11:41:52
【问题描述】:
我有以下问题:我正在尝试创建程序的可移植版本,因此我将 rpath 设置为“。”因此所有库都使用相对文件路径链接。这确实适用于除一个之外的所有库。出于某种原因,该程序仅在一个特定库存在于它在编译时链接的同一位置时才有效。这是我自己写的,它的 rpath 也设置为“.”。因此,基本上,即使库与可执行文件位于完全相同的位置,程序也会拒绝启动。
我已经验证只有一个库是问题所在,因为如果我在测试计算机上创建我的计算机上的库所在的文件夹,程序将启动。
linux-vdso.so.1 => (0x00007ffcc5961000)
libOgreHlmsPbs.so.2.1.0 => ./libOgreHlmsPbs.so.2.1.0 (0x00007fedeec3f000)
libOgreHlmsUnlit.so.2.1.0 => ./libOgreHlmsUnlit.so.2.1.0 (0x00007fedeea1d000)
libOgreMain.so.2.1.0 => ./libOgreMain.so.2.1.0 (0x00007fedee194000)
/home/marvin/workspace/HLMS_DS_DEMO/libHLMS_DS.so => not found
那么有没有人知道是什么导致 linux 试图在原始位置而不是像所有其他位置一样在相对位置找到库?该程序在 Windows 上也可以正常工作。
【问题讨论】:
-
你想设置rpath相对于当前目录(
$PWD)还是相对可执行位置? -
为什么不遵循 -I 规则? GCC Directory Options
-
最佳相对可执行位置
-
发布构建应用程序的完整命令行。从 Eclipse 输出中复制粘贴。
-
已经解决了,感谢帮助
标签: c++ linux gcc dynamic-linking