C++ 使用CMake复制mingw32构建

C++ 使用CMake复制mingw32构建,c++,cmake,mingw,mingw-w64,C++,Cmake,Mingw,Mingw W64,我有以下mingw32build指令,它可以工作。该命令成功地在Linux计算机上构建了Windows DLL /usr/bin/x86_64-w64-mingw32-g++-march=x86-64-mtune=x86-64-O2-shared-static-static libgcc-static libstdc++-s-fno rtti-fno exceptions-I/home/mbilyanov/.wine/drive_c/SierraChartLinux/ACS_Source/-w.

我有以下
mingw32
build指令,它可以工作。该命令成功地在Linux计算机上构建了Windows DLL

/usr/bin/x86_64-w64-mingw32-g++-march=x86-64-mtune=x86-64-O2-shared-static-static libgcc-static libstdc++-s-fno rtti-fno exceptions-I/home/mbilyanov/.wine/drive_c/SierraChartLinux/ACS_Source/-w./src/mycstudy.cpp-o./build/mycstudy.dll

我如何在CMake中复制这个?我们的目标是使用CMake进行构建,并获得完全相同的DLL文件。这就是我到目前为止所做的:

# ;--------------------------------------------------------------------------------
# ; Initials
# ;--------------------------------------------------------------------------------
cmake_minimum_required(VERSION 3.1)
project(MySCStudy)

MESSAGE(STATUS "<${PROJECT_NAME}> CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
MESSAGE(STATUS "<${PROJECT_NAME}> CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}")

# ;--------------------------------------------------------------------------------
# ; Include Directories
# ;--------------------------------------------------------------------------------
set(SC_INCLUDE_DIR /home/mbilyanov/.wine/drive_c/SierraChartLinux/ACS_Source)
MESSAGE(STATUS "<${PROJECT_NAME}> SC_INCLUDE_DIR: ${SC_INCLUDE_DIR}")

# ;--------------------------------------------------------------------------------
# ; Compiler Flags
# ;--------------------------------------------------------------------------------
add_compile_options(-D _WIN64 -U NOMINMAX -march=x86-64 -mtune=x86-64 -O2 -shared -static -static-libgcc -static-libstdc++ -s -fno-rtti -fno-exceptions -std=gnu++11 -Wno-deprecated)

# ;--------------------------------------------------------------------------------
# ; Source Files
# ;--------------------------------------------------------------------------------
set(SOURCE_FILES ./src/MySimpleMA.cpp)
MESSAGE(STATUS "<${PROJECT_NAME}> SOURCE_FILES: ${SOURCE_FILES}")

# ;--------------------------------------------------------------------------------
# ; Properties
# ;--------------------------------------------------------------------------------
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}/${CMAKE_BUILD_TYPE}/lib)
set(CMAKE_SHARED_LIBRARY_PREFIX "")

include_directories(${PROJECT_NAME} PUBLIC ${SC_INCLUDE_DIR})
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES})
  • 此处引用的头文件包括“sierrachart.h”,许多其他头文件位于外部包含目录中:
    /home/mbilyanov/.wine/drive\u c/sierrachart Linux/ACS\u Source

  • 作为回报,这些头文件引用了位于默认include文件夹
    x86\u 64-w64-mingw32
    中的其他头文件,如
    windows.h

  • 导入CMake生成的DLL后,主机应用程序将抛出以下错误:

     CreateStudyDLLModuleFunctionObject | Error loading 
     C:\SierraChartLinux\Data\MySCStudy.dll. Windows error code 126: Module not 
     found. Likely missing dependency file. | 2020-09-21 08:18:59.845 *`
    
  • >p>我检查了“代码>明文< /code >编译的DLL,还检查了Windows本地生成(本地应用程序允许使用C++源代码编译)依赖性Walk,它们都是有效的DLL,没有任何损坏。但是,使用CMake构建的DLL被标识为完全无效的DLL。我甚至无法将其加载到Dependency Walker中!我没有找到DOS或PE签名。此文件不是有效的32位或64位Windows模块。


    评论不用于扩展讨论;这段对话已经结束。
     CreateStudyDLLModuleFunctionObject | Error loading 
     C:\SierraChartLinux\Data\MySCStudy.dll. Windows error code 126: Module not 
     found. Likely missing dependency file. | 2020-09-21 08:18:59.845 *`