我正在压缩一个预构建(无源/目标文件)二进制应用程序以进行分发。二进制应用程序需要一些默认情况下未包含的库。我似乎能够让应用程序在最终用户上启动的唯一方法是包含一个将库路径设置为当前目录的run.sh
:
export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
./MyApp.out
但是,我真的很想允许用户解压缩 zip 并双击 MyApp.out
(没有 shell 脚本)。我可以编辑 MyApp.out
来搜索当前目录中的库吗?我已经使用 install_name_tool
在 OSX 上完成了类似的操作,但该工具在此处不可用。
最佳答案
您想要设置 rpath 。请参阅this answer 。所以链接使用
gcc yourobjects*.o -L/some/lib/dir/ -lsome -Wl,-rpath,.
但是您甚至可能想使用 -Wl,-rpath,$PWD
或 -Wl,-rpath,'$ORIGIN'
。请参阅this .
您还可以(这应该适用于预构建的可执行文件)通过在其中添加一行带有绝对路径(包含lib),然后运行 ldconfig -v ......请参阅 ldconfig(8)
我建议将/usr/local/lib
添加到/etc/ld.so.conf
中,并从/usr/local/lib创建符号链接(symbolic link)/libfoo.so
例如$HOME/libfoo.so
等...(然后运行ldconfig
...)。我认为将用户特定目录添加到 /etc/ld.so.conf
是不合理的...
*.deb
软件包,或者作为 Fedora 或 Redhat 的 *.rpm
软件包)。包管理系统处理依赖关系!
关于linux - 我可以通过在可执行文件中硬编码库路径来避免导出 LD_LIBRARY_PATH 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20732797/