2017-02-23 4 views
0

私はプログラムをコンパイルしており、lib2で使用されているlib1のCファイルに定義されている定数変数に "未定義の参照"を取得していました。なぜCリンクのライブラリを2度リストアップする必要があるのでしょうか?

clang myfile.c -L. -L../lib2dir -llib1 -llib2 

私は自分のUnix時代から、いつか再びライブラリを追加する必要があることを思い出しました。だから私はした:

clang myfile.c -L. -L../lib2dir -llib1 -llib2 -llib1 

それがリンクしています。なぜこれがまだ必要なのですか、私は間違ったことをやっていますか?それは不可欠ではありませんか?

+2

for grins最初にlib2を試しましたか? 1つ2つ1つまたは2つではなく、 –

答えて

2

ライブラリは、コマンドラインに置かれている順序でリンクされています。ライブラリがリンクされているときは、欠落しているシンボルのみが解決されます。あなたが言及したシンボルはlib2であるため、後で必要となることをリンカーがまだ認識していないため、lib1から解決されません。したがって、の前に-llib2を入れてください。

+0

ありがとう、私はそれらの順序を逆にする場合は動作します。私はまだリンカが元気に戻ってそれを探したり、lib2を処理するときにlib1にあったすべてのリストを保持しておくべきだと思っています。 – Scooter

+0

まあ...そうすべきです。しかし、そうではありません。 – DyZ

関連する問題