我想用32位为linux建立一个简单的hello world C程序。我试着用docker来做(因为我机器上的操作系统不是Linux)
这是Dockerfile
:
FROM gcc:4.9
RUN dpkg --add-architecture i386
RUN apt-get update && apt-get install -y libc6-dbg libc6-dbg:i386 gcc-multilib libc-dev:i386 gcc-4.9-base:i386
我这样构建它:
docker build -t my-gcc .
然后我试着这样使用它:
docker run --rm -v ${pwd}:/usr/src/myapp -w /usr/src/myapp my-gcc gcc -m32 -o hello hello.c
我得到这个错误:
/usr/bin/ld: skipping incompatible /usr/local/lib/gcc/x86_64-linux-gnu/4.9.4/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status
我错了什么?怎么可能修复它?我找到了similar questions,但他们建议我安装gcc-multilib
。
主机是Windows 10 x64,带有WSL2。但据我所知,这应该不重要。我想用gcc构建x86 32位linux二进制文件。
2条答案
按热度按时间5anewei61#
以下Dockerfile修复了此问题:
测试项目:
docker映像提供了两个gcc编译器:
如果使用
gcc
编译器,我们会得到几个链接器错误:强制执行
gcc-4.9
,可修复此问题。hmmo2u0o2#
我得到了32位编译工作与gcc 10(在debian)使用这个dockerfile:
我还需要各种各样的自动工具,你可以看到。
如果你需要使用configure在32位模式下设置一个工具(在我的例子中是cpputest),那么你可以使用如下的参数:
然后,当您在容器内进行编译时(如您的问题所示),使用gcc和正确的-m32标志,它可以很好地工作,没有错误: