使用/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
如何让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
相关文章:
- bitbake-grpc交叉编译/配置失败,错误为c-ares::care引用文件/usr/lib/libcares.s
- C++ 可执行文件在运行时找不到库,即使它在 /usr/lib 中(在 Linux 上)
- 没有规则来设定目标'/usr/lib/x86_64-linux-gnu/libboost_filesystem.so'
- Java System.loadLibrary 不会在 /usr/lib/x86_64-linux-gnu/ 文件夹中查
- C++: 错误: opencv_core: 即使所需的 .so 文件位于 /usr/lib/ 中,也没有这样的文件或目录
- ld:找不到文件:/usr/lib/crt1.o
- 如何在 C++ 中修复"/usr/bin/ld: warning: liblber-2.4.so.2, needed by //usr/lib/x86_64-linux-gnu/libcurl-gnu
- 在使用 bazel 构建一个简单的应用程序时,得到错误在 '/usr/lib/java/jdk1.8.0_74/bin/java' 找不到 java
- 使用/usr/lib/i386-linux-gnu而不是/usr/lib/x86_64-linux-gnu在CMake中
- G 不会链接到/usr/lib/中的库
- "/usr/lib/libstdc .so.6: version `GLIBCXX_3.4.15' not found"是什么意思,我该如何解决?
- "/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found`",如何解决?
- make[2]: *** 没有规则在 CGAL 中将目标 '/usr/lib/i386-linux-gnu/libmpfr.so'
- ' /usr/lib/i386-linux-gnu/qt5/bin/lrelease: 未找到 警告:目标为空' 尝试从源代码编译 Feathercoin 时出错
- /usr/lib/x86_64-linux-gnu/libstdc++.so.6:未找到版本 CXXABI_1.3.8'
- /usr/lib/libc_nonshared.a(fstat64.oS) 中的 ld 隐藏符号'fstat64'被 DSO 引用
- ImportError: /usr/lib/libboost_python.so.1.54.0: 未定义的符号: PyC
- 如何修复:/usr/lib/libstdc++.so.6:未找到版本"GLIBCXX_3.4.15"
- 当我尝试在 Ubuntu bash 中运行我的程序时,出现此错误:" /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21
- Debian 测试中缺少 '/usr/lib/libboost_unit_test_framework-mt.so'