2016-04-11 14 views
0

現在、SEGGERを使用してAT91SAM7S256用のバイナリをコンパイルしようとしています。リンクフェーズ(ソースファイルはすべてコンパイルされます)で問題を抱えています。 "lib_AT91SAM7S64.h"には、リンクしようとすると複数の未定義参照があります。ここでリンク時のエラー:関数への未定義参照

は、エラーメッセージのいくつかのサンプルです:

Output/Executable_1 Debug/Obj/AdcInterface.o: In function `initializeADCInterface': 
undefined reference to `AT91F_PIO_CfgInput' 
undefined reference to `AT91F_PIO_InterruptEnable' 
undefined reference to `AT91F_PIO_GetInterruptStatus' 

事は、これらの機能は、「未定義」that'reが「lib_AT91SAM7S64.h」ファイル内で定義されていることです。私は前にリンクフェーズでエラーに遭遇したことがないので、何をすべきかについて迷っています。

私はメイクファイルなどを使用していません。このプロジェクトはもともとGreen Hills Softwareを使用して開発されましたが、そのIDE上で問題なくコンパイルしてビルドします。私はGreen Hills Softwareにアクセスすることはできませんが、SEGGERにこれをコンパイルするように努力しています。

+1

関数は.hファイルで_declared_可能性がありますが、.hファイルの_defined_ではありません。どのようにプロジェクトプロパティまたはコマンドラインでライブラリファイルを指定していますか? – kkrambo

+1

詳細な説明がなくても、典型的な「リンカに外部ライブラリを渡すのを忘れる」や「間違った順序で相互依存するオブジェクトをリンクする」のように見えるので、ヘッダー内の実際には定義済みです(つまり静的なインライン実装または単に_declared_)これはまさにIDEによって生成された異なるビルドコマンド間で異なるかもしれない種類のものです。 – Notlikethat

+0

ありがとう、Notlikethat。判明したように、ヘッダーファイルにいくつかの宣言の問題がありました。 "__inline"が使用されていたので、ファイル "#define __inline static inline"の先頭に定義を追加し、存在していない未定義関数に関連する問題はなくなりました。 –

答えて

1

ほとんどの場合、これらの関数の実際のコードを持つライブラリにはリンクしていません。 .hは、他のコードがこれらの関数を正しく呼び出せるように、それらを定義します。

これらの記号を含む.aを(何らかの形で)指定する必要があります。私はmakefileを編集したり、プロジェクトに.aを追加したり、ビルドしているハードウェアをIDEで指定する必要があるかどうかは分かりません。申し訳ありませんが、SEGGERを使用していないため、その詳細はわかりません。うまくいけば、これはあなたのソリューションを見つけるためにあなたの前進を動かすのに十分です。

関連する問題