这个D-to-C连接有什么问题?

时间:2011-10-17 18:33:26

标签: c linker d

我已经设置了一个简单的测试来将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的架构,但这在运行时给出了总线错误。我之前从来没有遇到过公共汽车错误,所以这就是我的头脑。

我做错了什么?

2 个答案:

答案 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)。