gcc の -l オプションってどのような動作なのでしょうか??
sendmail関係の少々実験的な開発をするために、
OSに標準で入っているsendmail関係のライブラリである、
/usr/lib/libmilter.a
/usr/lib/libmilter.so
/usr/lib/libmilter.so.3
を削除して、
sendmailをソースからコンパイルして、
sendmailのソースの中のlibmilterもコンパイルしました。
この時点で、libmilter.a は、コンパイルしたディレクトリ(/usr/local/src/sendmail-8.14.2/)の下の
/usr/local/src/sendmail-8.14.2/obj.FreeBSD.6.2-RELEASE.i386/libmilter/
の中にしか存在しないのですが・・・
gcc -pthread -lc_r \
-L/usr/local/src/sendmail-8.14.2/obj.FreeBSD.6.2-RELEASE.i386/libmilter/ \
-lmilter \
test.c
としてコンパイルしようとすると、libmilter の中にある関数が、
ことごとく「undefined reference」になってしまいます。
これを、-L や -lオプションでライブラリを探させるのをやめて、明示的に
gcc -pthread -lc_r \
test.c \
/usr/local/src/sendmail-8.14.2/obj.FreeBSD.6.2-RELEASE.i386/libmilter/libmilter.a
と書くと、問題なくコンパイル&リンクできるのですが・・・
なぜなのでしょうか??
No.1ベストアンサー
- 回答日時:
リンカの仕様です.
基本的に, ライブラリについては「前にあるファイルで undefined だったものを後ろのファイルから探す」という動作をします. だから
-lmilter test.c
は NG でも
test.c -lmilter
の順なら OK.
この回答への補足
なるほど、そうだったのですね。
けれど謎なのは、milter.aではなくて、OS標準添付のmilter.soをリンクしていたときは、
-lmilter test.c
でもリンクできていたのです。so と a ではリンクの仕方がちがう、
ということなのでしょうか。。?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby Ruby / passenger のインストールについて 1 2023/01/30 18:31
- PostgreSQL PostgreSQL14.6のSSL対応について 1 2023/01/05 15:42
- UNIX・Linux postfix smtpサーバーリレーがTLSハンドシェーク失敗 1 2022/08/15 15:45
- その他(プログラミング・Web制作) python 2 2022/12/23 09:06
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- MySQL Mac です。ローカルホストの phpMyAdmin にアクセスできません。 1 2023/06/06 17:14
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- CGI -T(汚染モード)でメールが送れません 1 2022/06/12 14:11
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンパイル??
-
1 つ以上の複数回定義されてい...
-
Makefile作成時の拡張子.oとは?
-
エクセルVBAではRound...
-
外部シンボル "_main"は未解決です
-
makefileでコピーしてからコン...
-
” OS ビルド ” の意味が分か...
-
condefs.hはどこにあるの?
-
<math.h>があるのにsqrtが・...
-
gccでの分割コンパイルについて
-
コンパイルエラー
-
他のLinuxでも動くa.outの作り方
-
python エラー
-
エクセルのエラーメッセージ「4...
-
アプリケーションのDLLファイル...
-
C++でデスクトップGUIアプリ開...
-
ソフトの開発言語を調べる方法
-
<unistd.h>をVisualStudioでつ...
-
C言語をコンパイルするとコンピ...
-
Arduinoに関する質問
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
<math.h>があるのにsqrtが・...
-
” OS ビルド ” の意味が分か...
-
Makefile作成時の拡張子.oとは?
-
「fatal error C1189」を回避す...
-
1 つ以上の複数回定義されてい...
-
ILSpyで、デコンパイルできない。
-
C言語でヘッダファイルにグロー...
-
エクセルVBAではRound...
-
セミコロンについて
-
マクロ コンパイルがグレーバック
-
C++コンパイル時に『 C1083: in...
-
外部シンボル "_main"は未解決です
-
PRO*C コンパイルエラー
-
コンパイルエラー:ユーザ定義...
-
クリティカルエラー Expressio...
-
ビルドとリビルドの違いを教え...
-
RPGでプログラムからソースファ...
-
戻り値について
-
C++のhppファイルをCでinclude
おすすめ情報