Как я могу заставить CMake искать библиотеки i386 вместо x86_64?Использование/usr/lib/i386-linux-gnu вместо/usr/lib/x86_64-linux-gnu для find_library в CMake
Я пытаюсь создать исполняемые файлы i386 linux на компьютере для последующего развертывания. Я убедился, что я установил i386-версию моих зависимостей, и они под /usr/lib/i386-linux-gnu
, в то время как 64-битные библиотеки находятся под /usr/lib/x86_64-linux-gnu
, как и ожидалось.
Однако я не могу найти способ заставить CMake выглядеть под /usr/lib/i386-linux-gnu
для моих библиотек при построении 32 бит. Установка make 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})
Что в '$ {SFML_INCLUDE_DIR}?' ' – fedepad
@fedepad/USR/include', как и ожидалось. – ChemiCalChems
, так что похоже, что у вас есть «системный» sfml, который вы не установили из источника в пользовательском месте. – fedepad