【发布时间】: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 witsudo apt-get install libudev-dev:i386,现在它显示了/usr/bin/ld: i386:x86-64 architecture of input file the_paths is incompatible with i386 output,这是什么意思?