正能量網(wǎng)站推薦免費(fèi)下載名詞解釋seo
文章目錄
- 一、問題介紹
- 二、問題解決
一、問題介紹
由于項(xiàng)目需求,需要將一個(gè)“編譯時(shí)引用了另一個(gè)動(dòng)態(tài)鏈接庫(kù)”的文件(名為main.c),再編譯成一個(gè)動(dòng)態(tài)鏈接庫(kù)。
簡(jiǎn)要說明一下,即原本的項(xiàng)目代碼里,包含main.c,usb_hid.c和usb_hid.h三個(gè)文件,正常編譯可執(zhí)行文件main的依賴為
main.o依賴libusb庫(kù),usb_hid.c依賴libusb庫(kù),而可執(zhí)行文件main依賴前兩步編譯生成的main.o和usb_hid.o
對(duì)應(yīng)的makefile如下
CC = gcc
CFLAGS = -I . -I /usr/local/include/libusb-1.0 -std=c99
TARGET = mainall: $(TARGET)main: ./main.o ./usb_hid.o$(CC) $^ -L/usr/local/lib -lusb-1.0 -o mainrm -rf ./*.o./main.o: ./main.c$(CC) $(CFLAGS) -c $< -o $@./usb_hid.o: ./usb_hid.c$(CC) $(CFLAGS) -c $< -o $@clean:rm -rf ./*.orm -rf ./main# ----------------------------------------------------------------------------.PHONY: $(PHONY) clean
二、問題解決
之前沒有搞清楚依賴關(guān)系,沒有引入usb_hid相關(guān)的函數(shù),因此使用ldd -r libpufmac.so
命令后會(huì)報(bào)如下錯(cuò)誤:
OSError: ./libpufmac.so: undefined symbol: usb_index
OSError: ./libpufmac.so: undefined symbol: xxxxx
......
結(jié)合之前編譯動(dòng)態(tài)鏈接庫(kù)的經(jīng)驗(yàn),正確的編譯命令如下,使用該命令編譯后,可生成對(duì)應(yīng)的libpufmac.so,不會(huì)再出現(xiàn)上面的錯(cuò)誤
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引用對(duì)應(yīng)的動(dòng)態(tài)鏈接庫(kù),再通過 -I指定include的頭文件的位置