Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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
C++ CMake在linux中构建共享对象.so文件_C++_Linux_Windows_Cmake - Fatal编程技术网

C++ CMake在linux中构建共享对象.so文件

C++ CMake在linux中构建共享对象.so文件,c++,linux,windows,cmake,C++,Linux,Windows,Cmake,任务->运行Cmake在windows中生成dll,在linux中生成shared object.so文件 我正在将代码从windows移植到linux。我已经对源代码进行了必要的更改。我曾尝试更改CMakeLists.txt文件,但当我尝试更改时,它会抱怨找不到源文件。请你们指出我犯的错误。CMakeList.txt如下所示。 cmake在windows中运行良好,但在linux中它会抱怨错误。 我已经评论了几行,并在CMakeLIsts.txt中添加了几行,以使它在Linux中工作,但它不工

任务->运行Cmake在windows中生成dll,在linux中生成shared object.so文件

我正在将代码从windows移植到linux。我已经对源代码进行了必要的更改。我曾尝试更改CMakeLists.txt文件,但当我尝试更改时,它会抱怨找不到源文件。请你们指出我犯的错误。CMakeList.txt如下所示。 cmake在windows中运行良好,但在linux中它会抱怨错误。 我已经评论了几行,并在CMakeLIsts.txt中添加了几行,以使它在Linux中工作,但它不工作

CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )
CMAKE_POLICY( SET CMP0017 NEW ) 

PROJECT( disk_space_model )
INCLUDE( ../libs/helper_functions.cmake )
INCLUDE_THIRD_PARTY_SFC()

SET(    HEADER_FILES 
        stdafx.h
        INS_sensor_model.h
)

SET(    SOURCE_FILES
        Disk_space_model.cpp
)

SET(    RESOURCE_FILES 
        "Disk Space DLL.rc"
        resource.h
)

COMMON_SETUP()
SETUP_Lab_LIB_FILES( lib_foo lib_boo_files lib_platform lib_utils )

#ADD_DEFINITIONS(-D_USRDLL -DINSSENSORDLL_EXPORTS)
#ADD_LIBRARY( disk_space_model SHARED ${SOURCE_FILES} ${HEADER_FILES} ${RESOURCE_FILES} ${CMAKE_HELPER_FILES} )
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--export-all-symbols")
ADD_LIBRARY( disk_space_model [ STATIC | SHARED ] ${SOURCE_FILES} ${HEADER_FILES} ${RESOURCE_FILES}  ${CMAKE_HELPER_FILES} )
SET_OUTPUT_DIRS( disk_space_model )
TARGET_LINK_LIBRARIES( disk_space_model ${LIB_FILES} )
下面是我在congiure之后在CMake gui上生成时收到的以下错误

  4 bit compiler
-- Configuring done
CMake Error at CMakeLists.txt:37 (ADD_LIBRARY):
  Cannot find source file:

    [

  Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
  .hxx .in .txx


CMake Error in CMakeLists.txt:
  Cannot find source file:

    STATIC

  Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
  .hxx .in .txx


CMake Error in CMakeLists.txt:
  Cannot find source file:

    |

  Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
  .hxx .in .txx


CMake Error in CMakeLists.txt:
  Cannot find source file:

    SHARED

  Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
  .hxx .in .txx


CMake Error in CMakeLists.txt:
  Cannot find source file:

    ]

  Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
  .hxx .in .txx


-- Build files have been written to: /home/mydir/svn/proj1/apps/disk space
make: *** [cmake_check_build_system] Error 1

因为这个原因它坏了:

ADD_LIBRARY( disk_space_model [ STATIC | SHARED ] ${SOURCE_FILES} ${HEADER_FILES} ${RESOURCE_FILES}  ${CMAKE_HELPER_FILES} )

我猜您是从文档中复制粘贴的[STATIC | SHARED]。在你的情况下,这应该是一个静态或共享的选择,后者。

它被破坏是因为:

ADD_LIBRARY( disk_space_model [ STATIC | SHARED ] ${SOURCE_FILES} ${HEADER_FILES} ${RESOURCE_FILES}  ${CMAKE_HELPER_FILES} )


我猜您是从文档中复制粘贴的[STATIC | SHARED]。在您的情况下,这应该是静态或共享的选择,后者。

它找不到哪些源文件?另外,您确定要像这样覆盖CMAKE_SHARED_LINKER_标志吗?或者只是增加他们?如果这是您的实际语法,那就错了:注释行是可以的,但是[STATIC | SHARED]无效。@Angew,谢谢您的回复。我已经在我的问题区域添加了我的错误消息。你提到的问题2,但是[STATIC | SHARED]无效,但这是我在google上找到的在linux中创建.so文件的内容。如果这个步骤是错误的,你能指出为什么它是错误的,什么是正确的吗?ThanksIt的元语法。这意味着要么将STATIC用于生成静态库,要么将SHARED用于在其中生成共享库。这就是你所犯的错误。它正在查找名为[、STATIC等的文件。因为关键字STATIC或SHARED(如果存在)必须是库名称后的第一个参数。只需使用您注释掉的行即可。这是一个选项列表。[]中的所有内容是可选的,每个有效选项用|分隔。因此,它要么是静态的,要么是共享的。顺便说一句,如果你阅读了CMake文档,你还会看到插件库有一个模块选项。它找不到哪些源文件?另外,你确定要像这样覆盖CMake_共享链接器_标志吗?或者只是添加到它们?如果这是你的actual语法,它是错误的:注释行是可以的,但是[STATIC | SHARED]无效。@Angew,谢谢你的回答。我已经在我的问题区域添加了我的错误消息。你提到的第2期,但是[STATIC | SHARED]无效,但这是我在google上找到的创建文件。因此,linux中的文件。如果这一步错误,请您指出错误的原因,以及正确的步骤是什么?ThanksIt的元语法。这意味着要么将STATIC用于生成静态库,要么将SHARED用于生成共享库。这就是您遇到的错误。我t正在查找名为[、STATIC等的文件。因为关键字STATIC或SHARED(如果存在)必须是库名称后的第一个参数。只需使用您注释掉的行,就可以了。这是一个选项列表。[]中的所有内容是可选的,每个有效选项用|分隔。因此,它要么是静态的,要么是共享的。顺便说一句,如果您阅读CMake文档,您还会看到插件库有一个模块选项。我添加了这一行,因为当我尝试使用一个选项进行jsut时,它会抱怨缺少文件。例如c++:error:foo:No-this文件或目录C++:错误:DLL:如果我试图在Windows中构建它,则没有这样的文件或目录。它也不需要任何工作。也不应该在ADDLLoad库中包含HealErx文件。它没有道理:源实现文件是C++中的,而不是头文件。@ JunZWikCK不正确。dd_library/add_可执行调用,以便它们显示在Visual Studio和其他IDE中的项目文件列表中。它们仍然不会被编译。我明白了。显然是一个CMake错误或缺少的功能,我从来都不知道,因为我从未在Visual Studio中使用过CMake。@JohnZwinck出于好奇,这是一个错误吗?CMakeList不是一个Makefile-添加_库的参数是库的一部分文件,而不仅仅是要编译以生成库的源文件。依我看,这是命令的语义,不是bug。我添加了这一行,因为当我尝试使用一个选项进行jsut时,它会抱怨缺少文件。例如c++:error:foo:没有这样的文件或者目录:C++:错误:DLL:如果我试图在Windows中构建它,它就不工作了。它也不需要在AddLoad中包含头文件。它是没有意义的:源实现文件是C++中的,而不是头文件。@ JunZWikCK不正确。
add_library/add_可执行调用,以便它们显示在VisualStudio和其他IDE的项目文件列表中。不过,我明白了,它们不会被编译。很明显,这是一个CMake bug或缺少的功能,我从来都不知道,因为我从来没有在Visual Studio中使用过CMake。@JohnZwinck出于好奇,这是一个bug吗?CMakeList不是Makefile-添加_库的参数是库的一部分文件,而不仅仅是要编译以生成库的源文件。依我看,这是命令的语义,而不是bug。