CMAKE:无法识别文件(交叉编译)。从 Linux 到 Windows(32 位)

问题描述 投票:0回答:0

系统:Debian 11

项目树

C_UPDATER/
   App/
     ...(.cpp files)
   Loader.cpp

在我使用的.cpp文件中“#include

我正在使用全局包含和 lib 文件夹。

➜  ~ sudo find / -name libcurl.a
/usr/i686-w64-mingw32/lib/libcurl.a
/usr/lib/x86_64-linux-gnu/libcurl.a
➜  ~ sudo find / -name curl.h
/usr/i686-w64-mingw32/include/curl/curl.h
/usr/include/x86_64-linux-gnu/curl/curl.h

我有以下 CMakeLists.txt.

cmake_minimum_required(VERSION 3.13)
project(updater)

set(CMAKE_SYSTEM_NAME Windows)

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_CXX_COMPILER /usr/bin/i686-w64-mingw32-g++-posix)
set(CMAKE_C_COMPILER /usr/bin/i686-w64-mingw32-gcc-posix)

SET(CMAKE_INSTALL_PREFIX "/usr/i686-w64-mingw32" CACHE PATH "Cmake install prefix")
set(CMAKE_FIND_ROOT_PATH ${CMAKE_INSTALL_PREFIX})
set(CMAKE_SYSTEM_PREFIX_PATH /)
# adjust the default behavior of the FIND_XXX() commands:
# search programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

# search headers and libraries in the target environment
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER)

find_package(Threads REQUIRED)
find_package(CURL REQUIRED)
# Include libcurl header files
include_directories(/usr/i686-w64-mingw32/include)

add_library(AppModules Main/Main.cpp)

# Link against libcurl library
target_link_libraries(AppModules CURL::libcurl)

# Set compiler options
set(CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic -static -static-libstdc++ -lpthread -lstdc++ -lcurl")
set(CMAKE_EXE_LINKER_FLAGS "-DCURL_STATICLIB -static -static-libstdc++ -lpthread -lcurl")

# Add executable target
add_executable(updater Loader.cpp)

# Link against AppModules library
target_link_libraries(updater AppModules)

我得到以下错误。

➜  C_Updater make
[ 50%] Built target AppModules
[ 75%] Linking CXX executable updater
/usr/lib/x86_64-linux-gnu/libcurl.so: file not recognized: file format not recognized
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/updater.dir/build.make:105: updater] Error 1
make[1]: *** [CMakeFiles/Makefile2:97: CMakeFiles/updater.dir/all] Error 2
make: *** [Makefile:103: all] Error 2

据我所知,问题是 find_package 函数正在搜索 libcurl.so 而不是 libcurl.a.

我试着添加以下几行来告诉他在那里搜索。 但是这个错误仍然存在。


SET(CMAKE_INSTALL_PREFIX "/usr/i686-w64-mingw32" CACHE PATH "Cmake install prefix")
set(CMAKE_FIND_ROOT_PATH ${CMAKE_INSTALL_PREFIX})
set(CMAKE_SYSTEM_PREFIX_PATH /)
# adjust the default behavior of the FIND_XXX() commands:
# search programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

# search headers and libraries in the target environment
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER)

我也试过这样做。但是好像不对啊

target_link_libraries(AppModules /usr/i686-w64-mingw32/lib/libcurl.a)
c++ cmake shared-libraries static-libraries static-linking
© www.soinside.com 2019 - 2024. All rights reserved.