[問題] gcc 無法編譯過 linux/ioport.h

看板C_and_CPP (C/C++)作者 (....)時間14年前 (2012/02/02 20:00), 編輯推噓0(0045)
留言45則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 4.5.2 ubuntu 11.04 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 使用include <linux/ioport.h> or <linux/module.h> 這種在linux下的H檔,GCC編譯失敗 餵入的資料(Input):預期的正確結果(Expected Output): 要編譯過 錯誤結果(Wrong Output): fatal error: linux/ioport.h: 沒有此一檔案或目錄 程式碼(Code):(請善用置底文網頁, 記得排版) #include <linux/ioport.h> int main() { return 0; } 補充說明(Supplement): build-essential有安裝,只要include到linux路徑下的H檔就失敗 但是include <stdio.h>這類的就可以編譯成功 所以是否有環境變數之類要設定呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.84.93

02/02 20:01, , 1F
你確定你的電腦裡有那個檔案嗎?
02/02 20:01, 1F

02/02 20:06, , 2F
yes, /usr/src/linux-headers-2.6.38-13/include/linux
02/02 20:06, 2F

02/02 20:07, , 3F
or /usr/src/linux-headers-2.6.38-13-generic/include/linu
02/02 20:07, 3F

02/02 20:08, , 4F
使用 gcc TestCode.c 方式編譯
02/02 20:08, 4F

02/02 20:10, , 5F
可以加上-I參數編譯,或修改C_INCLUDE_PATH環境變數
02/02 20:10, 5F

02/02 20:11, , 6F
02/02 20:11, 6F

02/02 21:14, , 7F
少函式庫?
02/02 21:14, 7F

02/02 22:37, , 8F
用pkg-config看看
02/02 22:37, 8F

02/03 09:44, , 9F
剛才試著用C_INCLUDE_PATH=/usr/src/linux-2.6.38/linux...
02/03 09:44, 9F

02/03 09:45, , 10F
我在試試看好了~~因為還是有問題
02/03 09:45, 10F
因為我linux OS是ubuntu 11.04平台,有試著將.profile內新增 PATH="$usr/src/linux-headers-2.6.38-13-generic/include:$PATH" 再重新開機,但編譯時還是會說fatal error: linux/ioport.h 無此一檔案或目錄 然後在終端機下直接打上面PATH那串,用echo $PATH去看,的確路徑有加入到PATH內 但編譯也是相同結果~~ 最後在終端下使用C_INCLUDE_PATH方式去做,也是編譯失敗... 實在是不知道該怎麼搞了 囧 ※ 編輯: Patil 來自: 219.87.84.93 (02/03 12:10)

02/03 12:11, , 11F
include path跟那個執行的path是不一樣的
02/03 12:11, 11F

02/03 12:12, , 12F
那你有試過用 gcc -I 指定目錄的方式嗎?
02/03 12:12, 12F

02/03 12:18, , 13F
gcc -I /usr/src/.../include TEST.c ?
02/03 12:18, 13F
使用gcc -I /usr/src/linux-headers-2.6.38-13-generic/include TEST.c 可以編譯,但是似乎userspace要使用kernel header有問題,訊息如下 attempt to use kernel headers from user space, please see http://kernelnewbies.org/KernelHeaders 看了之後在linux-headers-2.6.38-13-generic執行make headers_install 卻又說 No rule to make target '/usr/src/linux-headers-2.6.38-13-generic/ubuntu/include/linux/aufs_type.h', need by '/usr/src/linux-headers-2.6.38-13-generic/usr/include/linux/.install' Stop. 至此...無言了 囧 ※ 編輯: Patil 來自: 219.87.84.93 (02/03 13:48)

02/03 14:40, , 14F
所以你是要寫driver嗎?記得沒這麼複雜吧...?
02/03 14:40, 14F

02/03 16:14, , 15F
嗯嗯...要控制PC硬體~
02/03 16:14, 15F

02/03 16:14, , 16F
因為我若只include <stdio.h> 這是沒問題的
02/03 16:14, 16F

02/03 16:14, , 17F
你可以去找Linux Device Drivers這本書,前面有教環境
02/03 16:14, 17F

02/03 16:15, , 18F
但只要一include <linux/xxx.h> 就會說找不到檔案
02/03 16:15, 18F

02/03 16:15, , 19F
Driver不是這樣寫的
02/03 16:15, 19F

02/03 16:15, , 20F
也不是driver~而是要控制EC...或IO
02/03 16:15, 20F

02/03 16:16, , 21F
話說Driver裡好像也不應該出現printf...
02/03 16:16, 21F

02/03 16:16, , 22F
要對EC或I/O的特定位址讀寫資料做控制
02/03 16:16, 22F

02/03 16:16, , 23F
你要寫一個Driver控制IO,上層再寫個AP來控制這個Driver
02/03 16:16, 23F

02/03 16:16, , 24F
我只是程式內文先隨便打...先確認編譯環境是否正常
02/03 16:16, 24F

02/03 16:17, , 25F
還是建議你先去看Linux Device Drivers吧,先有基本觀念
02/03 16:17, 25F

02/03 16:17, , 26F
這本書在網路上就可以找到全文了
02/03 16:17, 26F

02/03 16:18, , 27F
嗯嗯~~~現在是環境還搞不起來 囧"
02/03 16:18, 27F

02/03 16:18, , 28F
那本書裡面有很詳細的教學,不要再浪費時間亂試了...
02/03 16:18, 28F

02/03 16:19, , 29F
Kernel header本來就不能那樣玩
02/03 16:19, 29F

02/03 16:26, , 30F
XDDD...我的確是在亂試,總以為環境變數就是一切 @@
02/03 16:26, 30F

02/03 16:27, , 31F
我有找到第三版的FREE PDF了~~來研究一下
02/03 16:27, 31F

02/03 16:27, , 32F
如果不一定要在Linux下寫,這種事在DOS下做會比較快
02/03 16:27, 32F

02/03 16:27, , 33F
不管如何,還是感謝各位提供的方向~謝謝
02/03 16:27, 33F

02/03 16:28, , 34F
做個DOS開機隨身碟,加個djgpp就可以對底層做事
02/03 16:28, 34F

02/03 16:28, , 35F
因為要在linux下使用~~所以應該也要在linux下開發?
02/03 16:28, 35F

02/03 16:29, , 36F
一定要在Linux用的話就當我沒說過XD
02/03 16:29, 36F

02/03 16:29, , 37F
因為是要在linux OS下執行的背景程式~ 所以選擇linux開發
02/03 16:29, 37F

02/03 17:20, , 38F
你要去libary那邊找屬於linux/ioport.h的函式庫載入...
02/03 17:20, 38F

02/05 20:33, , 39F
library? 不好意思,是否可以詳細說明些~謝謝
02/05 20:33, 39F

02/07 15:36, , 40F
函式庫 就是放在lib的東西 "lib"是一個資料夾
02/07 15:36, 40F

02/09 13:44, , 41F
include是放標頭檔,lib是放.o檔. 大部分連結時.是根據
02/09 13:44, 41F

02/09 13:46, , 42F
include中的*.h檔去聯結lib中的*.o檔,兩個檔案要存再喔
02/09 13:46, 42F

02/09 13:47, , 43F
不知道這樣清楚嘛
02/09 13:47, 43F

02/09 22:29, , 44F
應該是.a 或者是.so檔吧 因為那是函式庫...
02/09 22:29, 44F

02/10 15:25, , 45F
樓上是對的,請原po自行理解一下喔
02/10 15:25, 45F
文章代碼(AID): #1FAdh0RO (C_and_CPP)
文章代碼(AID): #1FAdh0RO (C_and_CPP)