【问题标题】:Undefined symbol "start" while linking D program through LD通过 LD 链接 D 程序时未定义符号“开始”
【发布时间】:2024-01-04 16:00:01
【问题描述】:

我有以下简单的程序:

import std.stdio;

int main(string[] argv) {
    writeln("Hello, world!");

    return 0;
}

我是这样构建的:

DMD -c -m64 -od/proj/out -w -wi -fPIC -debug \
    -g -I/proj/hello -unittest /proj/hello.d

LD -L/usr/share/dmd/lib/ -arch x86_64 -execute -macosx_version_min 10.7 \
    -pie -lm -lpthread -lphobos2 -o /proj/out/hello_app /proj/out/hello.o

编译完美通过,但链接卡住了以下内容:

Undefined symbols for architecture x86_64:
  "start", referenced from:
     -u command line option
     (maybe you meant: _D3std9algorithm41__T10startsWithVAyaa6_61203d3d2062TAhTAhZ10startsWithFAhAhZb, _D4core6thread6Thread5startMFZv , _D3std9algorithm91__T10startsWithVAyaa11_62203c20612e74696d6554TAS3std8datetime13PosixTimeZone10TransitionTlZ10startsWithFAS3std8datetime13PosixTimeZone10TransitionlZb , _D3std9algorithm43__T10startsWithVAyaa6_61203d3d2062TAyaTAyaZ10startsWithFAyaAyaZb , _D3std9algorithm41__T10startsWithVAyaa6_61203d3d2062TAxaTaZ10startsWithFAxaaZb , _D3std9algorithm92__T10startsWithVAyaa11_62203c20612e74696d6554TAS3std8datetime13PosixTimeZone10LeapSecondTylZ10startsWithFAS3std8datetime13PosixTimeZone10LeapSecondylZb , _D3std9algorithm92__T10startsWithVAyaa11_62203c20612e74696d6554TAS3std8datetime13PosixTimeZone10TransitionTylZ10startsWithFAS3std8datetime13PosixTimeZone10TransitionylZb )
ld: symbol(s) not found for architecture x86_64

我想我忘记了一些额外的静态库来链接它来设置所有东西,但究竟是什么?

我还看到了有关如何在 dlang 网站上的某处进行单独编译和链接的说明,但找不到它。

UPD1:在 GCC 的帮助下使用 gcc -L/usr/share/dmd/lib/ -lphobos2 -lm -lpthread hello.o 链接时,它可以工作,但我需要使用 ld

【问题讨论】:

    标签: linker ld d


    【解决方案1】:

    链接时添加-lcrt1.o

    LD -L/usr/share/dmd/lib/ -arch x86_64 -execute -macosx_version_min 10.7 \
      -pie -lm -lpthread -lphobos2 -lcrt1.o -o /proj/out/hello_app /proj/out/hello.o
    

    [更新] 啊,你明白了:)

    【讨论】:

      【解决方案2】:

      纯属运气!

      它应该与 -lphobos2 -lm -lpthread-lcrt1.o 链接 - 然后一切都链接并正常工作。

      【讨论】:

        最近更新 更多