我有一个使用一些外部库的应用程序,并且我不想将这些库安装到系统中。而且我的程序需要glibc
版本,而该版本尚未安装在目标系统上,因此我必须将glibc
的自定义版本与应用程序一起提供。我的应用程序用C ++编写,并使用CMake作为构建系统。我还使用CPack将应用程序以及相关性打包到RPM中。
这些是我执行的步骤:
通过设置/opt/myapp
将设置前缀设置为CMAKE_INSTALL_PREFIX
构建自定义glibc
并安装到我的计算机(开发人员的计算机)中
构建二进制文件,使用ldd
命令检查库依赖项
将所有依赖项复制到我项目中的lib
文件夹中,使用INSTALL(FILE...)
将其安装到${CMAKE_INSTALL_PREFIX}/lib
使用patchelf
将二进制解释器修补到${CMAKE_INSTALL_PREFIX}/lib/ld.so
为使应用程序正常工作,我还需要执行另一个步骤,即将rpath
设置为${CMAKE_INSTALL_PREFIX}/lib
。但是,如果我使用patchelf
,则CPack不允许打包程序。我必须将rpath
设置为安装后的二进制 。
我知道这是非常临时的解决方案,什么是更好的解决方案?