系统: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)