c++ - CMake 在 Linux 中构建共享对象 .so 文件

标签 c++ linux windows cmake

任务 -> 运行 Cmake 在 Windows 中生成 dll,在 Linux 中生成共享对象(.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} )

以下是我在 CMake-gui 上进行 congiure 和生成后执行 make 时收到的以下错误

  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 |文档中的共享]。这应该是 STATICSHARED (后者,在您的情况下)的选择。

关于c++ - CMake 在 Linux 中构建共享对象 .so 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15199694/

相关文章:

c - 为什么在 Linux 上字符串文字的内存地址与其他的如此不同?

java - java 的 fileWriter() 函数是否适用于 Linux 类型的机器?

c++ - Qt : qt cannot send events to objects owned by a different thread - Why

c++ - 使用函数属性构造 qi::rule

c++ - Betfair API'ing 证书登录使用 C++ 提升 SSL 套接字

linux - 在 linux 中替换文件中的单引号和双引号

c++ - 具有伪继承设计 C++ 的模板

c - bash -i >&/dev/tcp/127.0.0.1/1234 0>&1

windows - 如何在 Delphi 中为 Windows 7 上的 Windows 搜索集成编写属性处理程序

windows - (Python wave 模块)不能在不影响播放速度的情况下改变音频采样率