我按照@jokerdino 的指示在 askubuntu
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.7
但为了成功编译我必须:
- 导出 LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
- sudo ln -s /usr/lib/x86_64-linux-gnu/crti.o /usr/lib64/crti.o
- sudo ln -s /usr/lib/x86_64-linux-gnu/crtn.o /usr/lib64/crtn.o
我理解这实际上破坏了 Ubuntu 多库模型。那么我该如何以正确的方式编译并删除链接呢?因为现在我想为 32 位进行交叉编译。(使用 Precise)
答案1
我删除了问题中发布的符号链接。
然后根据@shuttle87的建议问库本图
我做了以下事情:
sudo apt-get install --reinstall binutils
sudo apt-get install --reinstall build-essential
sudo apt-get install --reinstall libc6-dev
sudo apt-get install --reinstall gcc-4.7-multilib
sudo apt-get install --reinstall g++-4.7-multilib
然后这个就起作用了: gcc-m32 foo.c 复制代码
为 80386 进行编译。
但要为 x86-64 编译gcc foo.c不工作。
所以我尝试了:
gcc foo.c -L /usr/lib/x86_64-linux-gnu
但那也没用。最后不得不:
export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
前gcc foo.c会工作。
我使用“readelf -h”来验证可执行文件是 80386 和 X86-64。
不明白为什么“L”标志不起作用......
但至少我删除了那些符号链接,并且可以使用“导出”轻松地进行交叉编译。