Использование / usr / lib / i386-linux-gnu вместо / usr / lib / x86_64-linux-gnu для поиска библиотеки в CMake

Как я могу заставить 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})

0

Решение

Сообщите CMake, что вы не хотите искать 64-битные пути перед вызовом
find_package():

set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS OFF)

Документация:

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]