gccにて -l オプションを指定する位置

gccにおいて -l オプションを指定する位置は意味を持つ(誤った位置で指定するとリンクエラーになる)ので注意すること!

-l を参照元 listdevs.c (listdevs.o) の前に記述する

usb-1.0 (libusb-1.0.so) の関数が参照できない(検索対象外となる)ため、listdevs.o から見たときにリンクエラー(undefined reference)に陥る。
-lで指定したライブラリは先に指定した listdevs.c (listdevs.o) からは参照できない。

 

-l を参照元 listdevs.c (listdevs.o) の後に記述する

リンクは成功する。lisdevs.oをロードした後に -l で指定したライブラリの中身を参照(検索)するため、このケースでは期待通りにリンクが成功する。