linux – 链接共享库,调用没有自定义LD_LIBRARY_PATH的程序
我可以成功链接libawesomium-1.6.5.so:
-L-L. -L-lawesomium-1.6.5 -L-ldl libawesomium-1.6.5.so与我的可执行文件位于同一目录中,现在如果我尝试调用我的程序(我现在称之为prog),它存在于: ./prog: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file or directory 所以我创建了一个指向libawesomium-1.6.5.so的符号链接libawesomium-1.6.5.so.0,再次运行prog给我同样的错误,用自定义LD_LIBRARY_PATH =./ works调用它,但我想分发编程和我希望用户能够使用带有root权限的prog(将awesomium安装到/usr/lib等),而无需设置LD_LIBRARY_PATH.一个选项是设置LD_LIBRARY_PATH的shell脚本,但我更喜欢不同的方式(我也听说设置LD_LIBRARY_PATH是一个坏主意). 此外,如果不需要为libawesomium-1.6.5.so.0创建符号链接,那将会很棒. 编辑: 传递-rpath =.到链接器工作!但不幸的是,awesomium不能处理它: /.../awesomium_test/AwesomiumProcess: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file or directory 使用-rpath并从内部设置LD_LIBRARY_PATH工作 解决方法
如果使用gcc,则可以传递-Wl,-rpath = lib_directory,以使可执行文件搜索目录lib_directory中的库.
此外,此参数接受一个特殊值$ORIGIN,表示包含已执行程序的目录.因此,如果将-Wl,-rpath =’$ORIGIN’传递给gcc,您将能够将libawesomium-1.6.5.so保存在与程序相同的目录中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |