【问题标题】:Why my code compiles in x64 and not in x32?为什么我的代码在 x64 而不是 x32 中编译?
【发布时间】:2014-09-12 12:24:14
【问题描述】:

我在谷歌上搜索,但没有找到解决方案,我想在 x64 位 Debian 系统上用 32 位 gcc 编译 C 程序。我使用如下命令编译:

gcc -m32 -o programExecutable -L/usr/lib/i386-linux-gnu/ -I/home/secnok/polarssl-  
1.3.5/include/ -I/usr/local/include/libusb-1.0  main.c /home/secnok/polarssl-
1.3.5/library/libpolarssl.a /usr/local/lib/libusb-1.0.a -lpthread -ludev

我得到这个输出:

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux gnu/4.7     
/../../../libudev.so when searching for -ludev /usr/bin/ld: skipping incompatible  
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../libudev.a when searching for -ludev
/usr/bin/ld: skipping incompatible /usr/lib/libudev.so when searching for -ludev
/usr/bin/ld: skipping incompatible /usr/lib/libudev.a when searching for -ludev
/usr/bin/ld: cannot find -ludev

我已经安装了库 gcc++cmultilib 和 ia32-libs。同理,我已经导出了路径:

export LD_LIBRARY_PATH="/lib32:/usr/lib32:$LD_LIBRARY_PATH"

它仍然无法编译。这段代码在 x64 中编译没有错误,我只想为 32 位编译相同的代码。

【问题讨论】:

  • 可能是因为libudev 不适用于 32 位。
  • 请注意,x32 是由-mx32 编译器开关启用的模式(32 位长和 64 位模式中的指针)。 -m32启用的模式是i686。标题令人困惑。
  • ckruse 给出了原因。请注意,ia32-libs 是“旧方式”。在最近的 debian(你的是旧的)上,你启用 multiarch 并安装 libudev-dev:i386。
  • 我用sudo dpkg --add-architecture 启用了多架构,然后sudo apt-get update 并且我已经安装了libudev-dev:i386 wit sudo apt-get install libudev-dev:i386,现在它显示了/usr/bin/ld: i386:x86-64 architecture of input file the_paths is incompatible with i386 output,这是什么意思?

标签: c linux gcc libraries


【解决方案1】:

最后,我找到了直接在 32 位上静态编译它的解决方案,现在它可以工作了。我想这样一来,我就不用担心 x64 和 x86 之间的库兼容性了

【讨论】:

    猜你喜欢
    • 2021-11-11
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多