2

私はこれにしばらく取り組んできました。私はこれらのファイルを持っています:

main.c
zSim.h 
zSim.c
zDynamicArray.h 
zDynamicArray.c
zOptions.h 
zOptions.c
zMain.h 
zMain.c

すべてのファイルとヘッダーは同じフォルダー内にあります。

私のメインには次のものが含まれます:

#include "zDynamicArray.h"
#include "zOptions.h"
#include "zMain.h"
#include "zSim.h"
#include <stdio.h>
#include <math.h>

ヘッダーガードを使用しています。たとえば、これは私のzSim.hファイルからのものです。

#ifndef SIM_H
#define SIM_H
#include "zDynamicArray.h"
#include "zOptions.h"

//This Header is accountable
//for all Simulation Related things. 

int Simulate(SIMOPT so,PRINTOPT po);

#endif

これは私のzSim.cコードからのスニペットです(多分私はここで何か間違ったことをしていますか?):

#define M_PI 3.14159265358979323846
#include "zSim.h"
#include "zDynamicArray.h"
#include "zOptions.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

私はこのgccコマンドを使用してコンパイルしています:

gcc main.c zSim.c zOptions.c zDynamicArray.c zMain.c -o TEST

そして私も使用しました:

cc -c main.c
cc -c zSim.c
cc -c ... etc
cc *.o -o TEST

それらはすべて、math.hライブラリ内のすべての未定義の参照になります。また、gcc -Iコマンドを使用しても、数学はまだ定義されていません。

を使用してコンパイルするgcc main.cと、ヘッダーファイル内のすべての未解決の参照が取得されます。

私は何をすべきか?

4

2 に答える 2

4

最後に試し-lmてみてください:gcc -c main.c cc -c zSim.c cc -c ... etc cc *.o -o TEST -lm

-lm オプションを使用して数学ライブラリをリンクする必要があります。理由はここで説明されています: なぜ C で数学ライブラリをリンクする必要があるのですか?

于 2013-03-15T13:00:59.263 に答える
2

それらはすべて、math.h ライブラリ内の何かに対する未定義の参照になります。

math.hプロトタイプと型宣言を含むヘッダー ファイルのみです。実行可能ファイルを作成するときに、数学ライブラリに対してリンクする必要もあります。gcc 呼び出しに追加-lmします。

gcc main.c zSim.c zOptions.c zDynamicArray.c zMain.c -o TEST -lm

`sin` への未定義の参照も参照してください。

于 2013-03-15T13:00:50.233 に答える