2016-08-09 3 views
1

をリンクするエイダプログラムを取得できません、私はエラーを取得していますC.でプログラムを書いています:gccはと私のfile_name.oをリンクされている場合が混在Cとのpthreadライブラリと

file_name.c:(.text+0x5d): undefined reference to `pthread_create' 

は、この特定のエラーがアップします私の主要なADAファイル。 Cファイルの実際のコンパイルのために

、私は両方を使用して試してみました:

gcc -c -pthread file_name.c 

など:

gcc -c file_name.c -lpthread 

をこれらのどちらが動作するように見えます。何かご意見は?

UPDATE:私は実現しなかった ことの一つは、CおよびADAを組み合わせるときgnatmakeを使用している場合、Cライブラリが含まれていることです。

問題を使用することで解決した

​​
+0

コードをリンクする方法を教えてください。 – arrowd

+1

'gcc -c'はコンパイルしますが、リンクはしません。実際にエラーが発生した場合、どのコマンドを使用してリンクしていますか? – aschepler

+0

リンクは 'gnatmake'によって行われています。実際のリンク部分はgnatmakeフラグ '-largs'の後に' file_name.o'を付けて行います。 – user289882

答えて

4

をあなたは-cスイッチを使用している場合は、あなたのコードをリンクされていません。オブジェクトファイルにコンパイルするだけです。この段階でライブラリを指定することには意味がありません。 -lパラメータは単に無視されます。-cが存在する場合、効果はなく、意味のある目的はありません。

ライブラリは、あなたが(もちろん、-cなし)、最終的な実行可能ファイルにオブジェクトファイルを結合した瞬間に、すなわちを結ぶの瞬間に供給されるようになっています。あなたは私たちにコマンドラインを表示していません。その連結線は、正確にあなたの-lpthreadパラメータを追加する必要があります。

+0

リンクコードは含まれていませんでした。私が含まれているのは、スタンドアロンのCファイルをコンパイルするためだけのものでした。 gnatmakeはリンクしているものです。 – user289882

+1

@ user289882:素晴らしい。しかし、私が上で述べたように、その行は無関係です。そこに問題はありません。その行は引用したエラーを生成しません。エラーはあなたの*リンク行によって生成されます。これは '-lpthread'を指定する場所です。そして、あなたはしていない。 – AnT

+0

これをgnatmakeに追加してくれました。ありがとうございました。私はADAを使うのが初めてですので、今は多かれ少なかれ学習体験です。ありがとうございました! – user289882

関連する問題