在64位DMD上编译32位

时间:2016-09-14 07:56:51

标签: linux d 32bit-64bit ld

我正在使用xubuntu 16.04 amd64,并使用D语言。我以前在32位机器(ubuntu 14.04)上使用DMD i386,但现在,由于某种原因,我不能(或者不想)在我的系统上安装DMD_i386,所以我安装了一个对于amd64。我的所有项目都是在32位计算机上编写的,我使用int类型而不是64位可用的long类型。现在每当我尝试编译我之前写的东西时,看起来像这样,给出错误;

void someFunction(){
   string[] someArray;
   uint ln = someArray.length;//This compiled perfectly on 32 bit, but now it says that someArray.length is ulong, and ln is uint.
}

我知道将ln的类型更改为ulong将会fx它,但是我不想编译32位,而不是64位,而在32位,long / ulong类型不可用,因为它使用64位。

我尝试过的事情: 我尝试使用-m32开关使DMD产生32位输出。上面提到的错误由此解决,但链接器(ld)错误显示:

/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: cannot find -lpthread
/usr/bin/ld: cannot find -lm
/usr/bin/ld: cannot find -lrt
/usr/bin/ld: cannot find -ldl
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/5/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/5/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find -lc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/5/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/5/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find crtn.o: No such file or directory
collect2: error: ld returned 1 exit status
--- errorlevel 1

如何让DMD在64位DMD上产生32位输出?

1 个答案:

答案 0 :(得分:3)

自己解决了这个问题。事实证明,我错过了链接器所需的一些软件包。这解决了这个问题:

sudo apt install gcc-multilib