2011-11-24 9 views
1

最初は:ではないはすでにコンパイルされたライブラリを使用しています。ここでEclipse-CDT/C++:正しい.oファイルが作成されてリンカーに渡されても、未定義の参照エラーが発生する

状況だ:

project 
    somefoldername 
    src 
    include 
    library 
    src 
    include 

somefoldername/srcとライブラリ/ srcにソースフォルダとsomefoldername /として含めるように定義されています。私は、C++のようなフォルダ構造を持っている日食CDTプロジェクトを持っていますライブラリ/インクルードはincludeフォルダ(C/C++ General-> Paths and Symbolsの下にあり、コンパイラ-Iオプションにも影響します)として定義されています。

"library"フォルダには、自分のコードで使用されているライブラリのソースコード( "somefolder"にあります)が含まれています。さて、プロジェクト全体のコンパイルはうまくいきますが、リンクは、ライブラリのソースの "未定義の参照"エラーの一揃いとクラッシュします。

未定義の参照エラーが発生しますが、見つからない関数が見つかるはずの* .oファイルが作成され、後でリンカに渡されます。

私は間違っていますか?

編集:現在の設定と問題の解決方法に更新されました。

編集2:受け入れられた回答は少し助けになりましたが、最大の問題は「すべてを一括してリンクする」 - ポリーシィとエクリプスのようでした。私はautoconfに行き、主なアプリケーションにリンクする前にまずライブラリを構築しました。それはより多くの作業ですが、よりクリーンなアプローチです。

+0

Q:あなたはまだこれを解決した – paulsm4

+0

最後に、はい、私は一緒にライブラリの作者で、それを介して行ったいくつかのエラーは、ライブラリが期待される定義から来ました?。。あなたのポイント1を作ったソースコードを部分的に正しいものにするために作られたものですが、奇妙なものはまだほとんど残っていませんでしたので、私は通常のGCCツールチェーンからautoconfへ行き、ライブラリを別々に作りましたそれを全部につなぐために。これはどういうわけかトリックでした。おそらくすべての.oファイルを一度にリンクすると問題につながるでしょう。だから、それは "extern C"の部分ではありませんでしたが、あなたの最初の推測は問題の一部を解決しました。 – aRestless

答えて

2

三つの可能性:

1) "未定義" のシンボルが

This is unlikely, but you can verify using the "nm" Linux command 

2ライブラリで、実際にはありません)あなたが(「ダッシュビッグ-Lライブラリの検索パスを設定していません「)が正しくEclipseの

  • link static lib in eclipse cdt

    ...またはで...

    3)おそらくあなたは "C"リンケージを使ってライブラリを構築しましたが、あなたのプログラムはC++リンケージを使用しています(またはその逆)。 すべて関数があなたの.hヘッダにプロトタイプを持っていることを確認し、すべてのプロトタイプが "extern" C "を使用していることを確認してください。" C "(gcc")コンパイラを使用している場合、 」などの適切な:

    & http://msdn.microsoft.com/en-us/library/0603949d%28v=vs.80%29.aspx

+0

1)彼らは図書館にいる2)それは私の推測だろう。どのように設定する必要がありますか? 3)ライブラリにはcコードが含まれていますが、私はそれを直接使用していません。ライブラリ内で正しく認識されています。 – aRestless

+0

上記のとおり、私はコンパイルされたライブラリを使用していません。 "library"フォルダにはソースコードが含まれているため、2)のリンクはあまり役に立たないでしょうか? – aRestless

+0

ライブラリにCコードが含まれていて、あなたのプログラムがC++を使用していて、それぞれのグローバル名と関数名を "extern C"で明確に定義していない場合、問題はカーテンです3)。 Q:あなたの "ライブラリ"ソースには.oファイルが生成されていますか?Q:外部シンボルにはCまたはC++リンケージがありますか?(あなたの.oファイルには "nm"を使用できます)? oファイル(明示的に各.oファイルを含む)をあなたのリンクに含める? – paulsm4

関連する問題