如何使用CMake查找32位版本的zlib

Flogo

我想为我的用户提供一个在32位和64位版本之间进行选择的选项,并使用一个选项在他们之间切换。如果选项设置,我想补充-m32CMAKE_C_FLAGSCMAKE_CXX_FLAGSCMAKE_EXE_LINKER_FLAGS我也打电话set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS OFF)到目前为止,此方法运行良好,但现在我尝试查找库zlib并始终获得64位版本,从而导致链接器失败。

我发现了这个旧线程,它有同样的问题,但是没有适合我的解决方案。像Glenn Coombs一样,我不想让我的用户理解他们如何调用cmake才能获得32位版本,因此CC="gcc -m32" cmake对我不起作用。

编辑:事实证明,这甚至无法与电子邮件线程中建议的解决方案一起使用。这是一个小例子:

main.cpp:

#include <iostream>
#include "zlib.h"

int main() {
    std::cout << ZLIB_VERSION << std::endl;
    std::cout << "pointer size: " << sizeof(void*) << std::endl;
    return 0;
}

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.3)

project(usezlib32)
add_executable(usezlib32 main.cpp)

find_package(ZLIB)
if (ZLIB_FOUND)
    include_directories(${ZLIB_INCLUDE_DIRS})
    target_link_libraries(usezlib32 ${ZLIB_LIBRARIES})
endif()

调用g++ -m32 main.cpp -lz会生成有效的二进制文件,但调用会CC="gcc -m32" CXX="g++ -m32" cmake && make崩溃,并显示以下错误:

/opt/anaconda/lib/libz.so: error adding symbols: File in wrong format

我想问题是为什么CMake的路径与g ++的路径不同。

齐瓦列夫

CMake命令find_library考虑文件名执行搜索,不对找到的文件执行其他检查。

因此,查找32位库而不是64位库的唯一方法是使用32位库来查找目录,然后在其中查找64位库

  • 设置属性FIND_LIBRARY_USE_LIB64_PATHS可能会禁止搜索某些具有64位库的路径。它仅适用于包含“ 64”或“ lib64”的路径(find_library有关更多详细信息,请参见算法)。

由于您的路径/opt/anaconda/lib/libz.so不符合此规则,因此此属性无法为您提供帮助。

  • CMAKE_LIBRARY_PATH CMake缓存变量设置为包含32位库的目录列表。因此,这些目录将在其他目录之前进行搜索。

在这种情况下,您可以执行以下操作:

set(CMAKE_LIBRARY_PATH "/usr/lib/i386-linux-gnu" CACHE PATH "<desc>")

或者,可以将此变量cmake-Doption一起传递给

  • CMAKE_LIBRARY_PATH 环境变量设置为目录列表,包含32位库。因此,这些目录将在其他目录之前进行搜索。

在这种情况下,您可以执行以下操作:

set(ENV{CMAKE_LIBRARY_PATH} "/usr/lib/i386-linux-gnu")

可能其他非系统库的路径也存储在此变量中。因此,在更改它时要小心:您可能会中断对项目所需的其他库的搜索。

  • 设置CMake或环境变量CMAKE_PREFIX_PATH,或find_package(XXX)对特定程序包有影响的其他变量例如,对于zlib,可以设置ZLIB_ROOT指向zlib安装目录的变量。

尽管这种方法无疑有助于找到所需的库版本,但它比其他方法更具针对性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从64位版本制作32位程序?

来自分类Dev

如何安装32位版本的Google NaCl SDK?

来自分类Dev

ExtendedWebBrowser。使用浏览器的32位版本

来自分类Dev

Zoom for Ubuntu的32位版本?

来自分类Dev

Ubuntu 32或64位版本?

来自分类Dev

Flywaydb 32位版本

来自分类Dev

强制安装32位Deb失败后,如何安装64位版本?

来自分类Dev

如何从64位创建32位版本的Python代码

来自分类Dev

强制安装32位Deb失败后,如何安装64位版本?

来自分类Dev

如何安装相同-dev软件包的32位和64位版本?

来自分类Dev

如何安装64位操作系统而不是旧的32位版本?

来自分类Dev

如何在32位或64位版本的软件包之间进行选择?

来自分类Dev

如何在64位Linux上找到32位版本的Java的路径?

来自分类Dev

我应该下载Ubuntu的32位版本还是64位版本?

来自分类Dev

为什么Windows的64位版本比32位版本大?

来自分类Dev

将Ubuntu从32位版本升级到64位版本

来自分类Dev

如何在Visual Basic 2010中获取Windows 32或64位版本?

来自分类Dev

我如何在Ubuntu 15.10(32位版本)上安装gcc-4.6

来自分类Dev

Java JDK的64位版本是否可以在运行32位版本的Ubuntu的64位计算机上使用?

来自分类Dev

如何在64位Cent OS服务器上安装32位版本的Perl?

来自分类Dev

如何根据32位或64位版本的PowerShell排除配置文件的一部分

来自分类Dev

使用64位或32位版本的Android Studio时,Gradle会卡在“构建”或“ assembleDebug”中

来自分类Dev

使用64位或32位版本的Android Studio时,Gradle会卡在“构建”或“ assembleDebug”中

来自分类Dev

Windows 8.1 32位版本升级到Windows 10 64位版本

来自分类Dev

link.exe,选择64位或32位版本的Kernel32.lib

来自分类Dev

如何获得LinqToExcel 64位版本

来自分类Dev

如何专门下载64位版本的Ubuntu?

来自分类Dev

64位可执行文件的运行速度低于32位版本

来自分类Dev

通过一项设置运行Eclipse 64位和32位版本

Related 相关文章

  1. 1

    如何从64位版本制作32位程序?

  2. 2

    如何安装32位版本的Google NaCl SDK?

  3. 3

    ExtendedWebBrowser。使用浏览器的32位版本

  4. 4

    Zoom for Ubuntu的32位版本?

  5. 5

    Ubuntu 32或64位版本?

  6. 6

    Flywaydb 32位版本

  7. 7

    强制安装32位Deb失败后,如何安装64位版本?

  8. 8

    如何从64位创建32位版本的Python代码

  9. 9

    强制安装32位Deb失败后,如何安装64位版本?

  10. 10

    如何安装相同-dev软件包的32位和64位版本?

  11. 11

    如何安装64位操作系统而不是旧的32位版本?

  12. 12

    如何在32位或64位版本的软件包之间进行选择?

  13. 13

    如何在64位Linux上找到32位版本的Java的路径?

  14. 14

    我应该下载Ubuntu的32位版本还是64位版本?

  15. 15

    为什么Windows的64位版本比32位版本大?

  16. 16

    将Ubuntu从32位版本升级到64位版本

  17. 17

    如何在Visual Basic 2010中获取Windows 32或64位版本?

  18. 18

    我如何在Ubuntu 15.10(32位版本)上安装gcc-4.6

  19. 19

    Java JDK的64位版本是否可以在运行32位版本的Ubuntu的64位计算机上使用?

  20. 20

    如何在64位Cent OS服务器上安装32位版本的Perl?

  21. 21

    如何根据32位或64位版本的PowerShell排除配置文件的一部分

  22. 22

    使用64位或32位版本的Android Studio时,Gradle会卡在“构建”或“ assembleDebug”中

  23. 23

    使用64位或32位版本的Android Studio时,Gradle会卡在“构建”或“ assembleDebug”中

  24. 24

    Windows 8.1 32位版本升级到Windows 10 64位版本

  25. 25

    link.exe,选择64位或32位版本的Kernel32.lib

  26. 26

    如何获得LinqToExcel 64位版本

  27. 27

    如何专门下载64位版本的Ubuntu?

  28. 28

    64位可执行文件的运行速度低于32位版本

  29. 29

    通过一项设置运行Eclipse 64位和32位版本

热门标签

归档