2017-02-02 16 views
0

[編集:問題は、私が "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. 
+0

私はあなたのコードを試してみましたが、それは一般的なARM Cortex M0で私にとってうまくいきます。 'test.c'があなたのプロジェクトに追加され、コンパイルされることは確かですか? –

+0

ありがとうGuillaume。間違いはどこか他にあった、私の質問は間違っている、main.cは実際にmain.cppだったので、関数はextern "C"と宣言しなければならなかった...謝罪と助けてくれてありがとう! – user1532080

+0

[定義されていない参照/未解決の外部シンボルのエラーとは何ですか?どうすれば修正できますか?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-シンボル・エラー・アンド・ハウ・ド・イ・フィックス) –

答えて

1

を欠陥のある質問、それは実際にあなたが宣言せずにC++からC関数を呼び出す場合は、不足しているシンボルを得るでしょう。その場合にはC/C++を混合する場合、でしたそれはextern Cです。

関連する問題