我需要在我的应用程序中分发一个版本的OpenSSL。我不能使用Ubuntu,因为发行版当前禁用了TLSv1.1和TLSv1.2。
我已经阅读了一些关于如何解决丢失的共享对象的帖子(例如,How to add shared library search path to a executable file?)。
我担心的是我有一个与disto名称相同的库,它的二进制文件与发行版兼容。
我的问题是,是否有最佳实践来分发预期会发生冲突的共享对象?
答案 0 :(得分:2)
将SO放在私有目录中,并在运行可执行文件之前将该目录添加到包装器脚本中的$LD_LIBRARY_PATH
环境变量中。
答案 1 :(得分:1)
与在包装器脚本中设置LD_LIBRARY_PATH环境变量相反,您还可以使用额外的链接器标志编译可执行文件,这些标记会添加目录以搜索共享库。
链接器标志为-Wl,-rpath,<path to lib directory>
例如,假设您要将应用安装到/opt/myapp/bin
,您还可以拥有一个文件夹/opt/myapp/lib
,并在该文件夹中放置libssl.so
。然后,您将使用额外的链接器标志-Wl,-rpath,/opt/myapp/lib
编译您的应用程序。然后,当您运行应用程序时,它将首先查找该文件夹,然后再搜索标准文件夹以查找共享库。