0

c99 モードを使用せずに gcc でコンパイルした静的ライブラリがあります。gcc -std=c99 を使用してコンパイルでリンクしようとしています。これは私にエラーを与えています:

undefined reference to 'functionName'

ここで、functionName はスタティック ライブラリ内の関数です。

これは私のコンパイルです:

gcc -std=c99 -g -I../ -Llib/ -lmylib test.c ../file1.c ../file2.c -o test  

ここで C99 を使用しているのは、test.c #include のコードに C99 標準を使用する実装のヘッダー ファイルが含まれているためです。

スタティック ライブラリ (lib/libmylib.a) は、C99 モードでのコンパイルに失敗する (ただし、c99 フラグなしでコンパイルする) いくつかのライブラリを使用するコードであるため、c99 標準でコンパイルされていません。

-L & -l フラグの順序を最後 & gcc -std=c99 の直後に変更しようとしましたが、同じ「未定義の参照」エラーが発生しました。

これらをリンクするにはどうすればよいですか?

ありがとうございました。

編集:私が言及した関数functionNameは、ここに示されている setupStacktrace() の仮名です: http://pastebin.com/2RbEEPaj。署名ですvoid setupStacktrace();

4

1 に答える 1

1

コマンドライン引数の順序は重要です。現在の方法では、リンカーは静的ライブラリを調べて、これまで提供されたものを必要としないことを認識し、その中のすべてを破棄します。これを行う:

gcc -std=c99 -g -I../ -Llib/  test.c ../file1.c ../file2.c -lmylib -o test
于 2013-07-19T20:35:28.730 に答える