看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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