はい、以前に尋ねられましたが、SO や他の場所で思いついたすべての答えは、g++ ではなく gcc で C++ コードをコンパイルすること、または標準ライブラリに関する何らかの問題に関係しています。これまでのところ、ここで私にぴったりと合っているものは何もありません。
そこで、C の基本的な短期集中コースを受講し、標準ライブラリからではなく、作成したファイルへのリンクを示すために使用される例をコンパイルしようとしています。コードは次のとおりです。
math_functions.h
int sum (int x, int y);
float average (float x, float y, float z);
math_functions.c
int sum (int x, int y)
{
return (x + y);
}
float average (float x, float y, float z)
{
return (x + y + z) / 3;
}
そして最後に
test3.c
#include <stdio.h>
#include "math_functions.h"
main ()
{
int theSum = sum (8, 12);
float theAverage = average (16.9, 7.86, 3.4);
printf ("the sum is: %i ", theSum);
printf ("and the average is: %f \n", theAverage);
printf ("average casted to an int is: %i \n", (int)theAverage);
}
これらはすべて同じフォルダにあります。ターミナルを開いたときに、フォルダに cd して次を実行します。
gcc test3.c -o test3
私は得る:
Undefined symbols for architecture x86_64:
"_average", referenced from:
_main in ccmf69Tt.o
"_sum", referenced from:
_main in ccxms0fF.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
これは、gcc または g++ を使用した場合に発生し (これはすべて C である必要があるため、実行する必要はありません)、以前にコンパイルしたものはすべて、
#include <stdio.h>
頂点で。
を削除することで、コンパイルして正常に実行できます
#include "math_functions.h"
test3.cファイルから、 math_functions.h の内容をmain() の前に配置し、math_functions.c の内容をmain () の後に配置します。はい、これはコピー アンド ペーストなので、間違いなく同じコードです。
ええ、コードを動作させることはできますが、そのコードをコピーして 1 つのファイルに貼り付けずに他の C ファイルでそのコードを使用することができないという点で、演習の目的に反します。 ..
これを修正する方法はあるのでしょうか。標準の C、C++、Objective-C ライブラリ以外のものを含めることができますか?
これは、ターミナルをボックスし、手動で gcc コマンドを入力し、標準コマンドがすべてボタンに隠されている CodeRunner を介して発生するため、詰め込むことはできません。
Xcode 4.6.2のコマンドラインツールを使用して、2012 Mac MiniでMountain Lion 10.8.4(12E55)を実行しています(ほんの数時間前にインストールしましたが、実際にはMiniの標準的な使用よりも多くのことを行っていません今まで)
私の MacBook Air には同じソフトウェアがすべてインストールされていますが、まだダウンするかどうかをテストしていません。
ポインタはありますか?他の誰かがこれを持っていて、SOのどこかで解決した場合は、それを指摘してください。私は1時間ほど探していましたが、前に言ったように、これまでに見つけたすべての解決策は、は C++ コードか、標準ライブラリの奇妙なものです。