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
Linux上的CMake:“;目标平台不支持动态链接“;_Cmake_Static Linking_Dynamic Linking - Fatal编程技术网

Linux上的CMake:“;目标平台不支持动态链接“;

Linux上的CMake:“;目标平台不支持动态链接“;,cmake,static-linking,dynamic-linking,Cmake,Static Linking,Dynamic Linking,我有非常简单的CMakeLists.txt CMAKE_MINIMUM_REQUIRED(VERSION 2.8) FIND_PACKAGE(VTK REQUIRED) PROJECT(test CXX) 那真的没什么用。在/usr/lib/VTK-5.8/VTKConfig.cmake下可以正确找到程序包VTK。此文件包括许多类型的语句 ADD_LIBRARY(foobar SHARED IMPORTED) 指示共享库libfoobar.so需要在可执行文件中链接 但是,在使用上述脚本创建

我有非常简单的
CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
FIND_PACKAGE(VTK REQUIRED)
PROJECT(test CXX)
那真的没什么用。在
/usr/lib/VTK-5.8/VTKConfig.cmake
下可以正确找到程序包VTK。此文件包括许多类型的语句

ADD_LIBRARY(foobar SHARED IMPORTED)
指示共享库
libfoobar.so
需要在可执行文件中链接

但是,在使用上述脚本创建Makefiles时,CMake会抱怨

CMake Warning (dev) at /usr/lib/vtk-5.8/VTKTargets.cmake:244 (ADD_LIBRARY):
  ADD_LIBRARY called with SHARED option but the target platform does not
  support dynamic linking.  Building a STATIC library instead.  This may lead
  to problems.
Call Stack (most recent call first):
  /usr/lib/vtk-5.8/VTKConfig.cmake:200 (INCLUDE)
  /usr/share/cmake-2.8/Modules/FindVTK.cmake:73 (FIND_PACKAGE)
  CMakeLists.txt:4 (FIND_PACKAGE)
This warning is for project developers.  Use -Wno-dev to suppress it
这个警告是什么意思?如何处理


这是一个使用CMake 2.8.9的Linux系统。当包含
添加库(foobar SHARED IMPORTED)
的所有软件包出现此错误消息时,此处使用VTK-5.8作为示例。

当CMake全局属性目标\u SUPPORTS\u SHARED\u库设置为false且您使用共享库时,会出现此错误消息。请参阅CMake源代码中的
Source/cmAddLibraryCommand.cxx
第100行

除非您是为非常基本的系统(嵌入式操作系统)交叉编译,否则通常不会发生这种情况


我怀疑这是最新版本的CMake中的一个bug,或者您没有正确配置CMake。

PROJECT设置了一些关于plarform的重要变量


在将名称设置为PROJECT之前,不要调用FIND_*模块。

的确如此。出于某种原因,
TARGET\u SUPPORTS\u SHARED\u LIBS
未在此Linux机器上设置。显式设置
SET\u属性(全局属性目标\u支持\u共享\u LIBS TRUE)
消除了警告。这是一个很好的答案,但在
FIND\uu*
命令位于工具链文件中的情况下不适用。看到这个帮助了我,我正在使用QT,在
project
之前调用了
find_package
,我翻转了它们,错误消失了。