我已经设置了一个简单的测试来链接D代码和C,但我遇到了链接器问题.
// Compiled with "gcc -c CTest.c."
void SayHello()
{
printf("%s", "Hello, world!");
}
Run Code Online (Sandbox Code Playgroud)
// Compiled with "dmd DTest.d CTest.o."
extern (C) void SayHello();
void main()
{
SayHello();
}
Run Code Online (Sandbox Code Playgroud)
ld 吐出:
ld: warning: in CTest.o, file was built for unsupported file format which is not the architecture being linked (i386)
Undefined symbols:
"_SayHello", referenced from:
__Dmain in DTest.o
ld: symbol(s) not found
Run Code Online (Sandbox Code Playgroud)
我已经尝试手动指定CTest.c的架构-m32 -march=i386,但这在运行时给了我一个总线错误.我以前从来没有遇到过公共汽车错误,所以这就是我的头脑.
我做错了什么?
我假设您已经安装了32位dmd.您最初尝试更改gcc似乎是正确的,也许尝试删除-march选项.否则尝试使用-m64进行D编译,然后尝试-m32,如果它不起作用.
是的,dmd可以链接GCC生成的针对Linux ELF格式的目标文件,我相信MacOS/BSD?三月格式.Windows DMD生产OMF,而COFF现在更受欢迎.