5

Linux で g++ を使用して C++ プログラムをコンパイルする場合、独自のヘッダー ファイルをどのようにリンクしますか?

たとえば、次のインクルードを含むファイルがあります。

#include <stdlib.h>
#include <GL/glut.h>
#include <math.h>
#include <stdio.h>
#include "3DCurve.h"

次のコマンドを使用してコンパイルすると:

 g++ -lm -lglut -lGL -o 3dcurve Example_8_1.cpp

次のエラーが表示されます。

undefined reference to 'draw3Dcurve(double, double, double, double, double, double)'

3DCurve.h ファイルをコンパイラにリンクするにはどうすればよいですか? ヘッダー ファイルとその実装は、コンパイル中のファイルと同じフォルダーにあります。私の理解では、同じフォルダーにある場合、コンパイラーはそれを見つけるだけです。

何が得られないのですか?

4

3 に答える 3

7

1 つはヘッダー ファイルにリンクせず、1 つはヘッダー ファイルをインクルードするだけです。ただし、ヘッダー ファイルに対応する実装ファイルがある場合は、それをコンパイル行に含めるか、そこからオブジェクト ファイルを作成してコンパイル行に含める必要があります。エラーから、適切に処理されていない実装ファイルがあるようです。

DCurve.h実装 ifが呼び出されたと仮定すると、3DCurve.cppこれを行うことができます。

g++ -lm -lglut -lGL -o 3dcurve 3DCurve.cpp Example_8_1.cpp

他のオプションは、 g++ オプションを使用してオブジェクトファイルを作成することです。3DCurve.o-c

g++ -lm -lglut -lGL -o 3dcurve 3DCurve.o Example_8_1.cpp

または、共有ライブラリまたは静的ライブラリを作成し、別のサードパーティ ライブラリと同じように使用します。

于 2012-04-29T07:47:24.713 に答える
3

コンパイラは実装を「見つけるだけ」ではありません。

ヘッダーを含めた3DCurve.hので、GCC は検索パスを使用してそれを見つけます。

GCC は #include "file" で要求されたヘッダーを最初に現在のファイルを含むディレクトリで検索し、次に -iquote オプションで指定されたディレクトリで検索します。次に、山かっこで要求されたヘッダーを検索した場合と同じ場所で検索します。

実装する3DCurve.cppには、コマンドでコンパイルしてリンクする必要があります。

 g++ Example_8_1.cpp 3DCurve.cpp -o 3dcurve -lm -lglut -lGL
于 2012-04-29T09:41:57.507 に答える
0

コードでリンクエラーが発生しています

undefined reference to 'draw3Dcurve(double, double, double, double, double, double)'

これはdraw3Dcurve、オブジェクト ファイルのリンク中に、コンパイラが の定義を見つけることができないためです。コンパイル中に、の実装を持つライブラリまたはオブジェクト ファイルを含めると、draw3Dcurve正常に動作します。

于 2012-04-29T08:09:42.807 に答える