3

Microsoft C++ を使用して Clang を正常にビルドしました。Hello World テスト ケースをコンパイルしようとしています。オブジェクトファイルを生成するところまで到達し、残りの障害である標準ライブラリとリンクします。

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

Clang はまだ Windows とのリンクをまったく行っていないという過去数年間のコメントがありますが、それらは時代遅れであるという印象を受けます。実際、現在では Windows 形式のオブジェクト ファイルを生成できるようになっているようです。

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

... barf しないので、ファイル形式は正しいように見えますが、未解決の外部シンボル エラーが発生します。おそらく、Microsoft コンパイラは、出力オブジェクト ファイルに、リンクする必要がある標準ライブラリを示すタグを付けますが、Clang はそうではありません。それぞれのオブジェクト ファイルの 16 進ダンプを確認すると、これが確認され、そのヒントが得られるようです。使用するリンカー コマンド ライン:

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

この段階では大きな期待が寄せられていましたが、残念ながら、同じ未解決の外部シンボル エラーが引き続き発生します。

私はまだ何が欠けていますか?

4

1 に答える 1

8

Clang はデフォルトで 32 ビット コードを生成していましたが、私は 64 ビット MSC を使用していました。C シンボルの先頭の _ は x64 への移行に伴って削除されたため、clang コマンド ラインで -m64 を指定するとジョブが実行されました。

于 2013-08-26T21:39:55.710 に答える