[編集:問題は、私が "main.c"と書いたファイルは実際には "main.cpp"でした。関数をC++ファイルから削除します。質問は間違っていて答えはありませんが、この未定義のシンボルの問題がある場合は、C & C++を混ぜていないかチェックしてみてください。]エラー:L6218E:未定義のシンボルthree()
私はuVision 5を使ってファームウェアを開発していますしかし、私は自分の関数の1つを見つけるためにリンカーを得ることができません。
のmain.c:
#include "Test.h"
int main()
{
return three();
}
TEST.H:すべてのこれらのファイルは、私のプロジェクトのルートにある
#ifndef TEST_H
#define TEST_H
int three();
#endif
test.cの
#include "Test.h"
int three()
{
return 3;
}
、私は彼らを知っています私はそれらに構文エラーを導入するようにコンパイルされ、コンパイラはエラーを報告します。 また、生成マップファイルを見て、私は3は、()削除されたことを参照してください。テストの目的のために
Removing test.o(i.three), (4 bytes).
、私は--no_removeコマンドラインをリンカに持っていた、マップファイルは現在含まれています
0x0002ba76 0x00000004 Code RO 1 i.three test.o
明らかに、リンカは自分の関数をよく知っていて、フラグに応じてリンカを削除します。
がかかわらず、それが報告されます。
.\build\uvision5\test.axf: Error: L6218E: Undefined symbol three() (referred from main.o).
Not enough information to list image symbols.
私はあなたのコードを試してみましたが、それは一般的なARM Cortex M0で私にとってうまくいきます。 'test.c'があなたのプロジェクトに追加され、コンパイルされることは確かですか? –
ありがとうGuillaume。間違いはどこか他にあった、私の質問は間違っている、main.cは実際にmain.cppだったので、関数はextern "C"と宣言しなければならなかった...謝罪と助けてくれてありがとう! – user1532080
[定義されていない参照/未解決の外部シンボルのエラーとは何ですか?どうすれば修正できますか?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-シンボル・エラー・アンド・ハウ・ド・イ・フィックス) –