我正在使用预构建的(无源/目标文件)二进制应用程序进行分发。二进制应用程序需要一些默认情况下未包含的库。我似乎能够让最终用户启动应用程序的唯一方法是包含一个run.sh
,它将库路径设置为当前目录:
export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
./MyApp.out
但是,我真的想让用户只需解压缩zip并双击MyApp.out
(没有shell脚本)。我可以编辑MyApp.out
来搜索库的当前目录吗?我在OSX上使用install_name_tool
做了类似的事情,但是这个工具在这里不可用。
答案 0 :(得分:4)
您想要设置rpath。见this answer。所以链接使用
gcc yourobjects*.o -L/some/lib/dir/ -lsome -Wl,-rpath,.
但您甚至可能希望使用-Wl,-rpath,$PWD
或-Wl,-rpath,'$ORIGIN'
。请参阅this。
您也可以(这应该适用于预先构建的可执行文件)通过在其中添加一条绝对路径(包含lib的目录)来配置您的/etc/ld.so.conf
,然后运行ldconfig -v
......见ldconfig(8)
我建议将/usr/local/lib
添加到/etc/ld.so.conf
并制作符号链接/usr/local/lib/libfoo.so
到例如$HOME/libfoo.so
。 ldconfig
等等......(然后运行/etc/ld.so.conf
...)。我不认为将用户特定目录添加到*.deb
是合理的......
PS。您真正想要的是package您的应用程序(例如,作为Debian或Ubuntu的*.rpm
包,或者Fedora或Redhat的{{1}}。包管理系统处理依赖关系!