gpt4 book ai didi

macos - 分离编译和链接 - 在 D 中

转载 作者:行者123 更新时间:2023-12-04 16:37:02 25 4
gpt4 key购买 nike

好的,我目前正在玩 D(第一次),所以我想我会遇到一些非常基本的问题......我在这里......:-)

当我使用 dmd 编译链接时,它编译正常:

dmd myMain.d myTestModule.d

当设置 -v(详细)标志时,我注意到该过程基本上是一个编译步骤(使用 -c 标志)和链接(使用 gcc ) 和往常一样。

但是,当我尝试以下列方式编译时,我不断收到错误:

dmd -c MyMain.d myTestModule.d
gcc MyMain.o -o MyMain -m64 -lphobos2 -lpthread -lm

Undefined symbols for architecture x86_64:
"_D8someFunc3strFmZAya", referenced from:
__Dmain in MyMain.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

这是怎么回事?有什么想法吗?

最佳答案

编译 生成可能引用外部符号的目标文件。 链接 是将一组相关目标文件组合成单个二进制文件的过程,处理它们之间的所有外部引用,以及其他任务。

每个源文件被编译成一个匹配的目标文件。在你的例子中,你已经编译了 myMain.d 和 myTestModule.d,所以出现了两个目标文件:myMain.o 和 myTestModule.o。但是您只将其中一个提供给链接器(通过 gcc),这可以预见会导致某些符号无法解析。

gcc myMain.o myTestModule.o -o MyMain -m64 -lphobos2 -lpthread -lm

...应该可以解决问题。

另请注意,您可以使用完全相同的 dmd 二进制文件来调用链接器,它会负责为您链接默认内容(phobos、pthread 等):

dmd myMain.o myTestModule.o -o MyMain -m64

关于macos - 分离编译和链接 - 在 D 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14650660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com