在64位DMD上编译32位
问题描述:
我使用的是xubuntu 16.04 amd64,并使用D语言。我曾经在32位机器上使用DMD i386(ubuntu 14.04),但是现在由于某种原因,我不能(或不想)在我的系统上安装DMD_i386,所以我安装了一个用于amd64的机器。我所有的项目都是在32位机器上编写的,我使用的是int
类型,而不是使用64位版本的long
类型。现在每当我尝试编译我之前编写的东西时,看起来像这样,会给出错误;在64位DMD上编译32位
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,但我wan't编译此为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位输出?
答
自己解决了这个问题。事实证明,我错过了链接器需要的一些软件包。这解决了这个问题:
sudo apt install gcc-multilib
'array.length'返回一个'size_t',它是32位系统的'uint'和64位系统的'ulong'。 ulong在i86(“32位”)系统上绝对可用。 –