Permissions 安装位置缺少CMake共享库可执行权限
目前,我正在创建一个简单的项目,将安装一个实用程序共享库 以下是我的简历:Permissions 安装位置缺少CMake共享库可执行权限,permissions,cmake,installation,shared,Permissions,Cmake,Installation,Shared,目前,我正在创建一个简单的项目,将安装一个实用程序共享库 以下是我的简历: cmake_minimum_required (VERSION 2.6) project(MathLibs CXX) add_library (${PROJECT_NAME} SHARED fact.cpp fibo.cpp isPrime.cpp ) install (TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${PROJECT_NA
cmake_minimum_required (VERSION 2.6)
project(MathLibs CXX)
add_library (${PROJECT_NAME} SHARED
fact.cpp
fibo.cpp
isPrime.cpp
)
install (TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION ${PROJECT_NAME}/bin
LIBRARY DESTINATION ${PROJECT_NAME}/lib
ARCHIVE DESTINATION ${PROJECT_NAME}/lib)
由于我没有root权限,因此无法在系统库文件夹中安装共享库。我将CMAKE_INSTALL_前缀改写为$HOME/apps
当我构建共享库时,它具有可执行权限。
以下是包含共享库的生成文件夹:
-rw-rw-r-- 1 ameya ameya 9714 Jun 18 20:02 CMakeCache.txt
drwxrwxr-x 5 ameya ameya 4096 Jun 18 20:02 CMakeFiles
-rw-rw-r-- 1 ameya ameya 2701 Jun 18 20:02 cmake_install.cmake
-rw-rw-r-- 1 ameya ameya 84 Jun 18 20:02 install_manifest.txt
-rwxrwxr-x 1 ameya ameya 6808 Jun 18 20:02 libMathLibs.so
-rw-rw-r-- 1 ameya ameya 7748 Jun 18 20:02 Makefile
drwxrwxr-x 3 ameya ameya 4096 Jun 18 20:02 test
安装后,可执行权限消失。
以下是安装文件夹的位置:
-rw-r--r-- 1 ameya ameya 6808 Jun 18 20:02 libMathLibs.so
要更正此问题,我在CMakeLists.txt中缺少了什么?CMake没有在已安装的库上设置执行权限,因为Linux库上的不需要是可执行的
对于构建树中的库权限,这些权限不是由CMake设置的,而是由链接器设置的
如果出于某种原因需要已安装库的可执行权限,请使用install()
命令中的权限选项。CMake不在已安装库上设置执行权限,因为Linux库上的不需要是可执行的
对于构建树中的库权限,这些权限不是由CMake设置的,而是由链接器设置的
如果出于某种原因需要已安装库的可执行权限,请使用
install()
命令中的permissions选项。在联机查找我在CMake bugs报告中找到的更多详细信息后
在不同的系统上处理共享库是不同的,我尝试使用Ubuntu和Fedora工作站。在Ubuntu系统上,系统安装的共享库没有设置可执行位,但在Fedora工作站上,相同的库设置了可执行位 我们可以看看${CMAKE_ROOT}/CMAKE/Modules/Platform/Linux.CMAKE,
其中定义了CMAKE_INSTALL_SO_NO_EXE宏(很抱歉我在前面的回复中输入了错误)。在联机查找更多详细信息后,我在CMAKE bugs报告中找到了引用 在不同的系统上处理共享库是不同的,我尝试使用Ubuntu和Fedora工作站。
在Ubuntu系统上,系统安装的共享库没有设置可执行位,但在Fedora工作站上,相同的库设置了可执行位 我们可以看看${CMAKE_ROOT}/CMAKE/Modules/Platform/Linux.CMAKE,
其中定义了CMAKE_INSTALL_SO_NO_EXE宏(很抱歉在我之前的回复中输入错误)。感谢@Tsyvarev的回复。后来我发现这个可以使用-DCMAKE_INSTALL_SO_EXE=OFF,它在共享库中添加了可执行权限。此外,在不同平台(如Debian)上对共享库的处理也存在差异。所有共享库都是在没有可执行位设置的情况下安装的,而在其他版本中可能会有所不同。谢谢@Tsyvarev的回复。后来我发现这个可以使用-DCMAKE_INSTALL_SO_EXE=OFF,它在共享库中添加了可执行权限。此外,在不同平台(如Debian)上对共享库的处理也存在差异。所有共享库的安装都没有可执行位集,而在其他版本中可能会有所不同。