1

libstuff.aと を使用して、静的ライブラリ を作成しましgccar。ライブラリを/custom/lib/dir/に、ヘッダー ファイルを にインストールしました/custom/include/dir/。アーカイブに対して別のアプリケーションをコンパイルしようとすると、問題が発生します。

私がコンパイルしようとしているアプリケーションは、基本的にgcc -L/custom/lib/dir/ -I/custom/include/dir/ -lstuff.

コンパイルしようとすると、 で宣言してstuff.hで定義した関数に関するエラーが発生しますstuff.c

main.c:51: undefined reference to `stuff_init'
collect2: error: ld returned 1 exit status

libstuff.aコンパイラから削除すると/custom/lib/dir/、苦情が発生し/usr/bin/ld: cannot find -lstuffます。私がそれを元に戻せば、それは文句を言いません。したがって、アーカイブを正しく見つけています。

#include "stuff.h"gccからコード行を削除すると、未定義であるとmain.c不平を言うstuff_initので、ヘッダーを正しく見つけています。

を実行するnm libstuff.aと、出力に0000000000000000 T stuff_init. したがって、関数はアーカイブ ファイルで定義されます。

それで、私は何を間違っていますか?

4

1 に答える 1

5

正確なリンク行は表示されませんが、オブジェクト ファイルの後にライブラリをリストする必要があります (ただし、リストしないでください)。

gcc -o program main.o -L/custom/lib/dir -lstuff

ライブラリの外に複数のオブジェクト ファイルがある場合は、ライブラリの前にそれらをすべてリストします。オプションは、指定されたディレクトリのライブラリを使用するオプション-Lより前の任意の場所に配置できます。-llib

于 2014-03-25T01:36:56.140 に答える