我已经设置了一个简单的测试来将D代码与C链接起来,但我遇到了链接器问题。
// Compiled with "gcc -c CTest.c."
void SayHello()
{
printf("%s", "Hello, world!");
}
// Compiled with "dmd DTest.d CTest.o."
extern (C) void SayHello();
void main()
{
SayHello();
}
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
我尝试用CTest.c
手动指定-m32 -march=i386
的架构,但这在运行时给出了总线错误。我之前从来没有遇到过公共汽车错误,所以这就是我的头脑。
我做错了什么?
答案 0 :(得分:5)
我将假设您安装了32位dmd。您最初尝试更改gcc似乎是正确的,也许尝试删除-march选项。否则,使用-m64尝试D编译,如果不起作用,请尝试-m32。
是的,dmd可以链接GCC生成的针对Linux ELF格式的目标文件,我相信MacOS / BSD?三月格式。 Windows DMD生产OMF,而COFF现在更受欢迎。
答案 1 :(得分:-3)
Digital Mars编译器和GCC编译器使用不同的目标文件格式。使用(gdc和gcc)或(dmd和dmc)。