作者tinlans ( )
看板C_and_CPP
標題Re: [問題] GCC初學疑慮: 添加新的函式庫
時間Tue Apr 2 22:53:17 2013
※ 引述《newranger (ranger)》之銘言:
: 先謝謝版友們的提示:
: → hpps:跑看看ldconfig ? 04/01 14:13
: 但是先前在編譯時曾經有加入參數-I -L
: 這裡使用idconfig的用意為何? 這兩種方式網頁的說明不都是去指定路徑嗎?
: → purincess:你gcc 有-lusb-1.0 這個flag之類嗎 04/02 00:29
: 也有其他人建議以下指令:
: gcc -static test.c -L/mnt/test/libusb-1.0.9/install -lusb-1.0
: /usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/libusb-1.0.a
: (libusb_1_0_la-core.o):
: In function `libusb_set_interface_alt_setting':
: /mnt/test/libusb-1.0.9/libusb/core.c:1387: undefined reference to
: `pthread_mutex_lock'
: /mnt/test/libusb-1.0.9/libusb/core.c:1392: undefined reference to
: `pthread_mutex_unlock'
: /mnt/test/libusb-1.0.9/libusb/core.c:1389: undefined reference to
: `pthread_mutex_unlock'
: ....後面還有很多省略
: 提示告訴我libusb-1.0.9這東西本身也有問題,
: 自己都找不到參考對象了自然不能給人參考
: 一直到輸入以下指令, 才成功編譯出a.out
: gcc -static test.c -L/mnt/test/libusb-1.0.9/install -lusb-1.0 -lpthread -lrt
: 這裡有三個疑問:
: 首先這裡為何要使用 -static?
: 是否官網的壓縮檔沒有包含完整的東西, 以後我要下載其他組件或函式庫, 都要這樣
: 東拉拉西拉拉嗎?
: 感覺這樣我的函式庫最後不是會很亂很不利嗎?
: 最後一個問題我自己再上網學一下, 就是為啥人家一眼就看到那些找不到的參考對象就知
: 道要 -lpthread 跟 -lrt?
: 好像是利用objdump去找
你第一篇裝的東西裡不是有 pkg-config 用的 .pc 檔嗎?
一般來說該有的東西都寫在裡面了,至於路徑對不對我就不能跟你保證,正常是會對。
像我在 FreeBSD,這些 .pc 檔是存在 /usr/local/libdata/pkgconfig 下。
比方說我現在想用 libX11 這函式庫來開發視窗程式,而且這下面也有 x11.pc,
那我想知道該用什麼 CFLAGS,就是下 pkg-config --cflags x11,
這會得到這樣的結果:-D_THREAD_SAFE -I/usr/local/include 。
我想知道該用什麼 LDFLAGS,就是下 pkg-config --libs x11,
這會得到:-L/usr/local/lib -lX11 。
然後 UNIX 的 shell 可以用一對 `` 來展開指令輸出到螢幕的字串,
也就是說 gcc `pkg-config --cflags x11` main.c -o main `pkg-config --libs x11`
會展開成:
gcc -D_THREAD_SAFE -I/usr/local/include main.c -o main -L/usr/local/lib -lX11
所以基本上有附 .pc 檔的根本不需要你去擔心這種事,也沒有什麼東拉西拉的問題。
最後要說的是 ` 這個符號一般來說在鍵盤上是在 1 的左邊,不要跟右邊的 ' 搞混。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.65.147
※ 編輯: tinlans 來自: 61.231.65.147 (04/02 22:54)
推 yoco315:揪甘心 04/04 22:27
推 newranger:感謝說明....我應該把備份的VM映像檔拿出來才能重試 04/06 10:58