clangで`-llibary`オプションを使用する必要がある場合

clangで`-llibary`オプションを使用する必要がある場合

使用する必要があるかどうか疑問に思う-llibclang のオプション。例えば:

clang -lasdf foo.c -o foo.o

/usr/local/lib/libasdf.dylibライブラリを にリンクしますfoo.cが、それを含めなくても済む方法があるかどうか疑問に思っています。そうすれば、他のシステム ライブラリと同じように動作し#include <math.h>、何もリンクする必要がなくなります。

あるいは彼らが話しているのはそういうことかもしれないここ:

libSystem ライブラリには、libc や libm に通常含まれる関数、RPC サービス、および名前解決機能も含まれています。libSystem はアプリケーションに自動的にリンクされるため、コンパイラのリンク ラインに明示的に追加する必要はありません。利便性のために、これらのライブラリの多くは libSystem へのシンボリック リンクとして存在するため、-lm に対して明示的にリンクする必要はありませんが、エラーは発生しません。

答え1

-llibオプションが渡されるApple の ld のマニュアル ページから:

-lx このオプションは、リンカーにライブラリ検索パスで libx.dylib または libx.a を検索するように指示します。文字列 x が yo 形式の場合、そのファイルは同じ場所で検索されますが、ファイル名の前に 'lib' を付けたり、ファイル名に '.a' または '.dylib' を追加したりすることはありません。

このことから、このフラグはリンカーにライブラリを探して実行ファイルにリンクするように指示するだけなので、使用しない方法はないように思えます-l。これは、参照した libSystem ライブラリの一部ではないため、自動的には含まれません。これは、macOS で自動的にリンクされる唯一のライブラリのようです。/usr/local/lib/ 内のライブラリ (少なくとも MacOS 上) は、自動的にリンクされるという意味ではシステム ライブラリではありません。/usr/local/lib は通常、ユーザーがインストールしたライブラリに使用されるためです。

関連情報