2012-04-03 31 views
7

連接d程序我有以下簡單的程序:未定義的符號「啓動」,同時通過LD

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 

編譯通過完美,但與鏈接stucks以下:

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 

我想我忘了一些額外的靜態庫鏈接,讓它設置everythin克,但究竟是什麼?

另外我見過有關如何分別編譯和鏈接到dlang站點某處的說明,但無法找到它。

UPD1:當使用gcc -L/usr/share/dmd/lib/ -lphobos2 -lm -lpthread hello.o GCC的幫助鏈接,它的工作原理,但我需要使用ld

回答

6

鏈接時添加-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

發現它由於純粹的運氣!

它應該與-lphobos2 -lm -lpthread-lcrt1.o連接 - 然後一切鏈接和工作正常。