1. 問題の概要
プロジェクトの要件により、「コンパイル中に別のダイナミック リンク ライブラリを参照する」ファイル (main.c という名前) をダイナミック リンク ライブラリにコンパイルする必要があります。
簡単に説明すると、元のプロジェクト コードには main.c、usb_hid.c、usb_hid.h の 3 つのファイルが含まれており、通常にコンパイルされた実行可能ファイル main の依存関係は次のとおりです。
main.o は libusb ライブラリに依存し、usb_hid.c は libusb ライブラリに依存し、実行可能ファイル main はコンパイルの最初の 2 つのステップで生成された main.o と usb_hid.o に依存します。
対応するメイクファイルは以下の通り
CC = gcc
CFLAGS = -I . -I /usr/local/include/libusb-1.0 -std=c99
TARGET = main
all: $(TARGET)
main: ./main.o ./usb_hid.o
$(CC) $^ -L/usr/local/lib -lusb-1.0 -o main
rm -rf ./*.o
./main.o: ./main.c
$(CC) $(CFLAGS) -c $< -o $@
./usb_hid.o: ./usb_hid.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -rf ./*.o
rm -rf ./main
# ----------------------------------------------------------------------------
.PHONY: $(PHONY) clean
2. 問題解決
以前に依存関係を理解しておらず、usb_hid 関連の関数を導入していなかったので、ldd -r libpufmac.so
コマンドを使用した後、次のエラーが報告されます。
OSError: ./libpufmac.so: undefined symbol: usb_index
OSError: ./libpufmac.so: undefined symbol: xxxxx
......
これまでのダイナミック リンク ライブラリのコンパイル経験と組み合わせると、正しいコンパイル コマンドは次のようになります。このコマンドでコンパイルすると、対応する libpufmac.so が生成され、上記のエラーは再度発生しなくなります。
gcc -shared -fPIC main.c usb_hid.c -o libpufmac.so -L/usr/local/lib -lusb-1.0 -I /usr/local/include/libusb-1.0 -std=c99
-L を使用して対応するダイナミック リンク ライブラリを参照し、-I を使用してインクルードされるヘッダー ファイルの場所を指定します。