私は非常に大規模で厄介なプロジェクトに取り組んでおり、実際にクリーンアップする時間がなく、そのための API を提供する任務を負っています。私がやろうとしているのは、すべての醜いものを単一の静的ライブラリにラップしてから、単一のヘッダー ファイルを提供することです。
しかし、ヘッダー ファイルとライブラリを使用して実行可能ファイルをビルドしようとすると、一連の「未定義の参照」エラーが発生します。すべてのヘッダー ファイルを提供すればうまくいくと思いますが、実際にはこれを行う必要はありません。
現在、次のようにmakefile
見えます (簡単にするために少し変更されています)。
myprog.elf : libgiant_lib.a main.o
gcc -pg -o $@ main.o -lgiant_lib
main.o : main.c
gcc -c $(CFLAGS) $(SOME_INCLUDES) $< -o $@
libgiant_lib.a : $(A_BUNCH_OF_LIBS) $(COUPLE_OF_OBJS) api.o
ar rcs $@ $^
api.o : api.c api.h
gcc -c $(CFLAGS) $(INCLUDES_FOR_BUNCH_OF_LIBS) $< -o $@
アーカイブを確認したlibgiant_lib.a
ところ、必要なすべてのライブラリとオブジェクト ファイルが含まれているようです。それでも、それに対するリンクは機能しません。
ここで明らかな何かが欠けていると確信しています...