Как я могу заставить CMake искать библиотеки i386 вместо x86_64?
Я пытаюсь собрать исполняемые файлы Linux на компьютере i386 для последующего развертывания. Я удостоверился, что установил версию моих зависимостей i386, и они под /usr/lib/i386-linux-gnu
в то время как 64-битные библиотеки находятся под /usr/lib/x86_64-linux-gnu
, как и ожидалось.
Тем не менее, я не могу найти способ заставить CMake выглядеть под /usr/lib/i386-linux-gnu
для моих библиотек при сборке 32 бит. Настройка сделать CMAKE_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)
Документация:
Других решений пока нет …