Неопределенный символ «запуск» при связывании программы D через LD - PullRequest
7 голосов
/ 03 апреля 2012

У меня есть следующая простая программа:

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.

Ответы [ 2 ]

6 голосов
/ 03 апреля 2012

Добавить -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

[обновление] Ах, вы поняли:)

1 голос
/ 03 апреля 2012

Найден благодаря чистой удаче!

Он должен быть связан с -lphobos2 -lm -lpthread и -lcrt1.o - тогда все связывается и работает нормально.

...