使用/usr/lib/i386-linux-gnu而不是/usr/lib/x86_64-linux-gnu在CMake中

Using /usr/lib/i386-linux-gnu instead of /usr/lib/x86_64-linux-gnu to find_library in CMake

本文关键字:usr lib 64-linux-gnu CMake i386-linux-gnu 使用 x86      更新时间:2023-10-16

如何让CMake查找i386库而不是x86_64库?

我正在尝试在机器上构建i386-linux可执行文件,以便稍后部署。我已经确保我已经安装了i386版本的依赖项,它们在/usr/lib/i386-linux-gnu下,而64位库在/usr/lib/x86_64-linux-gnu下,正如预期的那样。

然而,在构建32位库时,我似乎找不到一种方法使CMake在/usr/lib/i386-linux-gnu下显示。将makeCMAKE_CXX_FLAGS设置为包含-m32只会导致链接失败,因为编译器正在构建一个32位的可执行文件,并试图将64位的库链接到它,这显然是做不到的。它这样做是因为它在某种程度上更喜欢获得/usr/lib/x86_64-linux-gnu/libsfml-system.so而不是/usr/lib/i386-linux-gnu/libsfml-system.so


到目前为止我尝试了什么:

  • -m32添加到我的编译标志中,导致可执行文件无法链接
  • 将我的CMAKE_FIND_ROOT_PATH设置为/usr/lib/i386-linux-gnu,希望它先在该目录下查找,尽管它仍然找到了库的64位版本

我真的没有更多的想法,尽管我正在积极研究论坛,但我似乎找不到太多有用的东西。也许这里有人知道我下一步该做什么。


我的CMakeLists.txt截至目前:

cmake_minimum_required(VERSION 3.5)
project(Synapse)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -pthread -O3 -m32")
set(CMAKE_SYSTEM_PROCESSOR i386)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION gnu)
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake_modules)
find_package(SFML 2.4 COMPONENTS system window graphics network audio REQUIRED)
include_directories(${SFML_INCLUDE_DIR})
message(STATUS ${SFML_LIBRARIES})
set(CLIENT_SOURCE_FILES Client/main.cpp types.h Client/Mouse.cpp Client/Mouse.h Client/Game.cpp Client/Game.h Client/Camera.cpp Client/Camera.h Client/Renderer.cpp Client/Renderer.h Networking.h)
add_executable(SynapseClient ${CLIENT_SOURCE_FILES})
set(SERVER_SOURCE_FILES Server/main.cpp types.h Server/Game.cpp Server/Game.h Server/Commander.cpp Server/Commander.h Server/Unit.cpp Server/Unit.h Server/Client.cpp Server/Client.h Networking.h Server/Log.cpp Server/Log.h Server/User.cpp Server/User.h)
add_executable(SynapseServer ${SERVER_SOURCE_FILES})
target_link_libraries(SynapseClient ${SFML_LIBRARIES})
target_link_libraries(SynapseServer ${SFML_LIBRARIES})

在调用之前让CMake知道您不想搜索64位路径find_package():

set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS OFF)

文件:

  • 查找_LIBRARY_USE_LIB64_路径
  • FIND_LIBRARY_USE_LIB32_path
相关文章: