我從源碼安裝了一個新的lib,我試圖鏈接到它。鏈接器抱怨說它找不到應該在lib中的符號。如何鏈接到共享庫?
這裏有錯誤,我得到:
$ make all
gcc -std=c99 -g -Wall -O3 `pkg-config --cflags --libs libmodbus` -c client.c -o client.o
gcc -std=c99 -g -Wall -O3 `pkg-config --cflags --libs libmodbus` client.o -o client
client.o: In function `main':
/home/gauthier/code/modbus/client.c:29: undefined reference to `modbus_new_tcp'
/home/gauthier/code/modbus/client.c:30: undefined reference to `modbus_connect'
/home/gauthier/code/modbus/client.c:33: undefined reference to `modbus_read_registers'
/home/gauthier/code/modbus/client.c:35: undefined reference to `modbus_close'
/home/gauthier/code/modbus/client.c:36: undefined reference to `modbus_free'
collect2: error: ld returned 1 exit status
make: *** [client] Error 1
pkg-config
這樣說:
$ pkg-config --cflags --libs libmodbus
-I/usr/local/include/modbus -L/usr/local/lib -lmodbus
和/usr/local/lib
文件是這些:
$ ls /usr/local/lib/ | grep mod
libmodbus.la
libmodbus.so
libmodbus.so.5
libmodbus.so.5.0.5
而且,所以文件中包含未定義的參考文獻:
$ grep modbus_connect /usr/local/lib/*
Binary file /usr/local/lib/libmodbus.so matches
Binary file /usr/local/lib/libmodbus.so.5 matches
Binary file /usr/local/lib/libmodbus.so.5.0.5 matches
我試過加/usr/local/lib
到LD_LIBRARY_PATH
,沒有了。不是說我可以幫忙,因爲我的編譯器命令中有-L
。
我也嘗試手動編寫-I
,-L
和-l
(不使用pkg-config
),這並沒有幫助。
如何使鏈接器明白對modbus_*
函數的引用是否正確?
GCC -v XXX看到詳細 – farmer1992 2014-09-25 14:59:32
把-lmodbus到底 – farmer1992 2014-09-25 15:00:52