2013-08-26 43 views
3

我已經成功地使用Microsoft C++構建了Clang,並試圖讓它編譯一個hello world測試用例;它得到儘可能生成目標文件,然後使用標準庫是剩下的絆腳石鏈接:Clang,微軟鏈接器和標準庫

hello-202520.o : error LNK2019: unresolved external symbol _printf referenced in function _main 
LINK : error LNK2001: unresolved external symbol _mainCRTStartup 

有前幾年的說法鏘還沒有做的Windows連接在所有的意見,但我得到的印象那些過時的,實際上它現在似乎能夠生成Windows格式的目標文件:

clang -c hello.c 
ren hello.o hello.obj 
link hello.obj 

...不BARF,所以文件格式似乎是正確的,但仍然得到了懸而未決外部符號錯誤。可能猜測的是微軟編譯器標記其輸出對象文件的標誌庫的指示,他們需要鏈接,而鏗鏘沒有,並目測各個對象文件的十六進制轉儲似乎證實了這一點,並給出了暗示鏈接器命令行中使用:

link /defaultlib:libcmt /defaultlib:oldnames hello.obj 

我必須通過這個階段寄予厚望,但可惜它仍然給出了同樣的無法解析的外部符號錯誤。

我還遺失了什麼?

+0

只爲了理智,在* obj之後硬鏈接libs * (完全猜測,順便說一句)。 – WhozCraig

回答

6

原來Clang默認生成32位代碼,但我使用的是64位MSC,並且C符號上的前導__已經被刪除,並且移動到了x64,因此在clang命令行上指定了-m64工作。

+0

這對我來說恰恰相反。我必須提供-m32來叮噹聲 –