又是一件折騰了我一天的事情。其實epoll**早就會寫了,lib裡面早就支援了epoll,但一直停留在「支援」階段。實際上卻是沒有用起來過。公司裝了一台機器,裡面有epoll.h和epoll.a,但核心卻不是2.6,所以機器上能編譯但不能執行。另外一台機器公升級了核心,但卻怎麼也找不到epoll.h和epoll.a。所以鬱悶了很久,於是下定決心,要把這個問題搞個清楚。終於,在向東博士的幫助下,把問題解決了。
其實網上也有很多的介紹,例如
epoll-lib-0.11.tar.gz ,把它放到已經公升級核心到2.6的redhat9機器,解開。然後進去make,發現沒有mkdep……也懶得管了,直接來乙個:make lib/libepoll.a
跳過了mkdep這一步,但還是出錯:
./src/epoll.c: in function `epoll_create':
./src/epoll.c:28: error: `__nr_epoll_create' undeclared (first use in this function)
./src/epoll.c:28: error: (each undeclared identifier is reported only once
./src/epoll.c: in function `epoll_ctl':
./src/epoll.c:30: error: `__nr_epoll_ctl' undeclared (first use in this function)
./src/epoll.c: in function `epoll_wait':
./src/epoll.c:32: error: `__nr_epoll_wait' undeclared (first use in this function)
百思不得其解……向東博士提說:把核心的源**ln 到/usr/src/linux目錄下。這才恍然大悟。於是:
ln -s /usr/src/linux-2.6.14.2 /usr/src/linux
哈哈,這下編譯通過了。趕快make install(其實我是自己手工把.h和.lib複製到相應目錄,那些man的東西全部都不管了)。
/usr/lib/gcc/i686-pc-linux-gnu/4.0.2/../../../../i686-pc-linux-gnu/bin/ld: cannot find /lib/libpthread.so.0
這是暈死,還以為是自己的gcc裝錯了,於是重新裝了一次gcc。但還是出現同樣的問題。
ln /lib/i686/libpthread-0.10.so /lib/libpthread.so.0
鏈結也都通過了。
也未免高興得太早,輪到執行出錯了:
/lib/libgcc_s.so.1: version `gcc_3.3' not found (required by /usr/lib/libstdc++.so.6)
……這次不用別人提示了,馬上到處找找**還有libgcc_s.so.1。於是我把/home/cyt/gcc-4.0.2/objdir/gcc/libgcc_s.so.1複製到了/lib下面。(其實就是我make gcc的那個目錄下面找到的libgcc_s.so.1,其它地方都有的,不過我也懶得找了)。
終於程式跑起來了……
gdb和gdbserver的安裝和除錯
嵌入式linux的gdb除錯環境由host和target兩部分組成,host端使用arm linux gdb,target board端使用gdbserver。除錯時,應用程式在嵌入式目標系統上執行,而gdb除錯在host端。gdb除錯的時候,pc機上的gdb向開發板上的gdbserver發出命令,...
tensorflow的快捷安裝和除錯
深度學習技術一直在發展,但是caffe的更新跟不上進度,也許是維護團隊的關係 caffe團隊成員都是業餘時間在維護和更新。導致的結果就是很多新的技術在caffe裡用不了,比如rnn,lstm,batch norm等。當然這些現在也算是舊的東西了,也許caffe已經有了,我已經很久沒有關注caffe的...
Select和epoll的區別
當乙個節點和多個節點建立連線時,如何高效的處理多個連線的資料,下面具體分析兩者的區別。1.select函式 函式原型 int select int nfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout ...