現在、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にこれをコンパイルするように努力しています。
関数は.hファイルで_declared_可能性がありますが、.hファイルの_defined_ではありません。どのようにプロジェクトプロパティまたはコマンドラインでライブラリファイルを指定していますか? – kkrambo
詳細な説明がなくても、典型的な「リンカに外部ライブラリを渡すのを忘れる」や「間違った順序で相互依存するオブジェクトをリンクする」のように見えるので、ヘッダー内の実際には定義済みです(つまり静的なインライン実装または単に_declared_)これはまさにIDEによって生成された異なるビルドコマンド間で異なるかもしれない種類のものです。 – Notlikethat
ありがとう、Notlikethat。判明したように、ヘッダーファイルにいくつかの宣言の問題がありました。 "__inline"が使用されていたので、ファイル "#define __inline static inline"の先頭に定義を追加し、存在していない未定義関数に関連する問題はなくなりました。 –