确保打在rpm包中的.so文件具有可执行权限
来源:互联网 发布:mac windows 截图 编辑:程序博客网 时间:2024/06/16 12:26
背景介绍:
有一个工程,其目录结构是:
libB
-- libA
-- src
-- packaging
目录libA通过scons编译生成libA.so,目录src中的源代码通过 CMAKE编译生成libB.so, 且libB.so 依赖 libA.so. 另外有个应用程序 appC,依赖 libB.so。请问如何libB如何打包成rpm。libB.rpm
方案一:
1) 先只编译LibA,生成的libA.so在libA/libA.so,然后在libB的CMAKE文件中链接LibA.so, 并用FILES安装LibA.so.
libB.spec:
Name: libBVersion: 0.1.0Release: 1License: TO BE / FILLED INGroup: TO BE / FILLED INSource0: %{name}-%{version}.tar.gzSummary: LibBBuildRequires: cmakeBuildRequires: scons%descriptionLibB%package develSummary: Include Files and Libraries mandatory for DevelopmentGroup: TO BE / FILED INRequires: %{name} = %{version}-%{release}%description develThis package contains all necessary include files and libraries neededto develop applications that require these.%prep%setup -q%buildpushd .cd libAscons --prefix=%{_prefix}popdcmake . -DCMAKE_INSTALL_PREFIX=%{_prefix}make %{?jobs:-j%jobs}%installrm -rf %{buildroot}%make_install%cleanrm -rf %{buildroot}%post%postun%files%defattr(-,root,root,-)%{_libdir}/libA.so%{_libdir}/LibB.so%files devel%defattr(-,root,root,-)%{_includedir}/*%{_libdir}/pkgconfig/%{name}.pc%{_libdir}/pkgconfig/libA.pc
LibB CMAKELists.txt:
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)PROJECT(libB)ADD_LIBRARY(${PROJECT_NAME} SHARED src/libB.c)# 寻找libA.soFIND_LIBRARY(LibA NAME A PATHS ${CMAKE_SOURCE_DIR}/libA DOC "LibA library")# 链接libA.soTARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS} ${LibA})# 安装libA.soINSTALL(FILES ${CMAKE_SOURCE_DIR}/libA/libA.so DESTINATION ${LIBDIR})# 安装libB.soINSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBDIR})2)编译appC
编译出错:
appC: nothing provides libA.so needed by libB
原因分析:明明libB.rpm里已经包括了libA.so 和libB.so, 为什么说没有提供libA,so?
我们解开rpm看看:
rpm2cpio libB.rpm | cpio -divcd usr/libls -l-rwxr-xr-x 1 root root 1637738 19 18:27 libB.so-rw-r--r-- 1 root root 1674522 19 18:27 libA.solibA.so的可执行权限没有了。
原因是 以FILES安装的文件会去除可执行权限
INSTALL(FILES ${CMAKE_SOURCE_DIR}/libA/libA.so DESTINATION ${LIBDIR})
解决方案2:
1)编译安装libA都通过scons。
libB.spec:
Name: libBVersion: 0.1.0Release: 1License: TO BE / FILLED INGroup: TO BE / FILLED INSource0: %{name}-%{version}.tar.gzSummary: LibBBuildRequires: cmakeBuildRequires: scons%descriptionLibB%package develSummary: Include Files and Libraries mandatory for DevelopmentGroup: TO BE / FILED INRequires: %{name} = %{version}-%{release}%description develThis package contains all necessary include files and libraries neededto develop applications that require these.%prep%setup -q%buildpushd .cd libAscons --prefix=%{_prefix}popdcmake . -DCMAKE_INSTALL_PREFIX=%{_prefix}make %{?jobs:-j%jobs}%installrm -rf %{buildroot}pushd .cd libAscons --prefix=%{_prefix} --libdir=%{_libdir} --install-sandbox=%{buildroot} installpopd%make_install%cleanrm -rf %{buildroot}%post%postun%files%defattr(-,root,root,-)%{_libdir}/libA.so%{_libdir}/LibB.so%files devel%defattr(-,root,root,-)%{_includedir}/*%{_libdir}/pkgconfig/%{name}.pc%{_libdir}/pkgconfig/libA.pc
LibB CMAKELists.txt: 去除安装libA.so步骤。
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)PROJECT(libB)ADD_LIBRARY(${PROJECT_NAME} SHARED src/libB.c)# 寻找libA.soFIND_LIBRARY(LibA NAME A PATHS ${CMAKE_SOURCE_DIR}/libA DOC "LibA library")# 链接libA.soTARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS} ${LibA})# 安装libA.so#INSTALL(FILES ${CMAKE_SOURCE_DIR}/libA/libA.so DESTINATION ${LIBDIR})# 安装libB.soINSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBDIR})
2)编译appC成功。
0 0
- 确保打在rpm包中的.so文件具有可执行权限
- 要在目录下写或者生成文件,该目录必须具有可执行权限
- 打可执行jar包
- 如何打rpm包
- 无法在服务器上访问指定的路径或文件,请确保您具有必需的安全权限且该路径或文件存在。
- maven打可执行jar包
- gradle 打可执行jar包
- MyEclipse打可执行jar包
- Intellij 打可执行jar包
- maven打可执行jar包
- 抽取RPM SRC包中的文件
- CentOS下打RPM包
- 打rpm包详细介绍
- 如何打一个rpm包
- java 打可执行jar 文件
- IDEA maven 打可执行jar包 包括依赖jar文件和所有配置文件资源文件
- C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/DATA 无法在服务器上访问指定的路径或文件。请确保您具有必需的安全权限且该路径或文件存在。 解决方法
- Ant打可执行jar包指南
- centos6.7环境之kvm虚拟化quem工具配置及使用详解
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- 斐波那契递归算法
- AlertViewController的使用
- 高空作业的三宝
- 确保打在rpm包中的.so文件具有可执行权限
- war包和jar包区别
- poj2239 poj1274【二分匹配】
- 蓝桥杯练习题 PREV-11 横向打印二叉树(排序二叉树)
- git 相关的命令
- 学习算法之路
- 层标记--div
- MFC 相关问题集中
- 从尾到头打印单链表