5

約 30 個のソース ファイル (.c) を含む C プロジェクトに取り組んでいます。このプロジェクトは、GNU ツールを使用して Ubuntu で実行されている 32 ビット マイクロコントローラー (i.MX515) で構築しています。

コンパイル フェーズは正常に完了しますが、リンク プロセスが開始されると、次のエラーが表示されます(質問の最後にある完全なエラーの場合)

In function `_start': init.c:(.text+0x30): undefined reference to `main'

私はmain()単純な機能を持っていますprintf()

リンク用の Makefile 行は次のようになります。

final: $(OBJDIR)/main.o $(OBJDIR)/TchClaKnn_BuildKdtreeInt.o $(OBJDIR)/TchClaKnn_FreeKdtreeInt.o.... (Go upto 30 files like this)
    @echo ".Linking"
    $(CC) $(LFLAGS) -o $(OBJDIR)/main.o $(OBJDIR)/TchClaKnn_BuildKdtreeInt.o $(OBJDIR)/TchClaKnn_FreeKdtreeInt.o..... (Go upto 30 files like this)

ヘルプ!!!

よろしく

ヴィクラム


完全なリンク エラー

/usr/lib/gcc/arm-linux-gnueabi/4.3.3/../../../crt1.o: In function `_start':
init.c:(.text+0x30): undefined reference to `main'
collect2: ld returned 1 exit status
make[1]: *** [final] Error 1
make[1]: Leaving directory `/home/ubuntu/Documents/Project/IMX_Project_v1'
make: *** [all] Error 2
4

2 に答える 2

8

finalはmain.o(およびその他の多く)に依存しますが、makefileはすべての「その他」を取得してmain.oに出力します(これはほとんどのコンパイラで-oが行うことです)

リンク行を次のように編集します。-o final $(OBJDIR)/main.o

于 2010-05-03T13:26:50.393 に答える
3

リンカは、main() が定義されているソースのオブジェクト コードを見つけることができません。おそらくコンパイルされていません。30 個のファイルのうち、main() が含まれているファイルが .OBJ にコンパイルされていることを確認します。

于 2010-05-03T12:55:31.757 に答える