Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Permissions 安装位置缺少CMake共享库可执行权限_Permissions_Cmake_Installation_Shared - Fatal编程技术网

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)上对共享库的处理也存在差异。所有共享库的安装都没有可执行位集,而在其他版本中可能会有所不同。