交叉編譯工具鏈根據每個開發板所提供的型別進行設定,我的工具鏈名稱為
arm-fsl-linux-gnueabi-gcc
後面實際配置時請注意
第一步:配置交叉編譯工具鏈
配置好交叉編譯工具鏈為全域性環境,也就是將其新增到環境變數中,具體因人而異。在這不具體說明,請自行查詢資料
export arch=arm
export cross_compile=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl
-linaro-toolchain/bin/arm-none-linux-gnueabi-
export path=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolch
ain/bin:$path
第二步 交叉編譯libsocketcancd libsocketcan-0.0.10 //進入目錄
mkdir out //建立資料夾,放置生成檔案
./configure --prefix=/資料夾路徑/libsocketcan-0.0.10/out --host=arm-fsl-linux-gnueabi
make
make
install
此時生成檔案會出現在out/lib
資料夾下,將這些生成的庫複製到開發板的檔案系統內,可以放在lib目錄下,也可以放在usr/lib
裡面
(每篇部落格的設定都不同,該步的生成檔案我沒有拷貝到開發板。以防後面配置出現問題,可以設定上)
第三步 編譯安裝canutils-4.0.6.tar.bz2
先將 libsocketcan 裡面的標頭檔案libsocketcan.h
,can_netlink.h
複製到 canutils 的include
裡面。這些檔案在out/include
目錄下
cd canutils-4.0.6/
mkdir out
//進行實際配置,可直接複製下面**,務必仔細修改資料夾路徑和交叉編譯工具鏈
./configure --host=arm-fsl-linux-gnueabi \
--prefix=/資料夾路徑/canutils-4.0.6/out li \
bsocketcan_libs=-lsocketcan ldflags=
"-l/ \
資料夾路徑/libsocketcan-0.0.10/out/lib/" l \
ibsocketcan_cflags=
"-i/資料夾路徑/libsocke \
tcan-0.0.10/out/include"
make
make
install
最後在out/sbin
下能見到canconfig
命令,在out/bin
下面candump/canecho/cansend/cansequence
將這些檔案拷貝到開發板/usr
目錄下即可。
具體請看參考部落格
實際使用時,將接收到的can資料傳送到遠端,同時遠端伺服器會再傳送資料過來,所以需要多執行緒的需求。寫好編譯時,會出現這樣的報錯
undefined reference to `pthread_create'
很明顯是由於設定多程序導致的,新增相應庫後無效。經搜尋發現需要在編譯時進行相應設定,問題如下:
問題:pthread
庫不是 linux 系統預設的庫,連線時需要使用靜態庫libpthread.a
,所以在使用pthread_create()
建立執行緒,以及呼叫pthread_atfork()
函式建立fork處理程式時,需要鏈結該庫。
**解決:**在編譯中要加-lpthread
引數(最好加在最後面,我到貌似就是這樣才行)
gcc thread.c -o thread -lpthread
thread.c
為你些的原始檔,不要忘了加上標頭檔案#include
但由於can-utils
是通過makefile管理,因此需要找到相關的編譯設定。摸索一小時終於找到~
在工具鏈\src\gnumakefile
中,第96行新增-lpthread
,效果如下
cflags = -wall -g -lpthread -o2
同時在第365行新增-lpthread
,效果如下:
.c.o:
$(compile)
-mt $@ -md -mp -mf $(depdir)
/$*.tpo -lpthread -c -o $@ $<
$(am__mv)
$(depdir)
/$*.tpo $(depdir)
/$*.po
之後執行make
,make install
編譯即可。 opencv交叉編譯記
這兩天一直在編譯opencv。確實很頭疼。1.用cmake 來交叉編譯opencv樣例時,其實在交叉編opencv 時,可以通過設定,將原始碼裡的sample都編譯的 當時不知道 將原始碼裡的sample c 考到opencv的交叉編譯的build目錄裡,要修改下example cmake 裡的cm...
Qt編譯Oracle OCI驅動
工作中經常用到oracle,而預設情況下qt只有sqlite和odbc驅動,網上有相應的驅動安裝介紹,自己實驗可行 qt環境 qt 5.0.2 mingw4.7.2 win7 32bit 開啟qt command prompt,分別執行以下命令,以編譯oracle驅動 set include inc...
編譯mongodb C 驅動 windows
這個mongodb 的c 驅動著實費了我一番功夫,不過終於成功跑通了。注意這裡的 boost 版本我們選擇 1.49.0,方便起見,我是全部安裝的,安裝完成之後 除了boost stage doc 這三個目錄其餘全部刪除,這個時候大小約1.6g,遠沒有5g那麼大,好多obj檔案都是編譯的中間檔案 之...