1. 開發環境:
(1). CPU: Andes RISC CPU core_N12.
(2). 平台: ADP-XC5FF676 V1.1.
(3). Linux OS: Ubuntu9.04.
(4). Toolchains: AndeSight v1.3.3 for Linux.
(5). Embedded Linux2.6.18
(6). Qt Creator 1.3 IDE .
(7). Qt for embedded Linux 4.6.1.
2. 輸入〝
source bashrc.nds32le-linux-V0〞指定交叉編譯路徑,這的步驟請參照setup步驟.

3. 輸入〝
tar -xjf OpenCV-2.0.0.tar.bz2〞解壓縮.

4. 輸入〝
cd OpenCV-2.0.0〞至目錄下.

5. 在編譯前須先修改一些程式,至開啟目錄〝
autotools/config.sub〞檔案.

6. 修改程式,增加line 246,

與line 327(注意有Tab鍵與空白鍵的差異).

7. 開啟目錄〝
include/opencv/cxoperations.hpp〞程式.

8. 修改程式line 68 ,修改成
〝#if __GNUC__ >= 4 __linux〞,增加的參數為CMake編譯環境參數.

9. 輸入〝
./configure --host=nds32le-linux --without-gtk --without-carbon --without-quicktime --without-1394libs --without-v4l --without-ffmpeg --without-python --without-swig --enable-static --disable-shared --disable-apps CXX=nds32le-linux-g++ CPPFLAGS=-I/usr/include〞設定編譯參數.

10. 輸入〝
make〞開始編譯.

11. 編譯完成後,輸入〝
sudo PATH=/home/acer/Andestech/AndeSight133/toolchains/nds32le-linux-glibc-V0/bin:$PATH make install〞,再輸入password,安裝產生函式庫.

12. 結果產生在根目錄〝
/usr/local〞的〝
lib〞與〝
include〞附錄下.
請問要將編譯完的Opencv使用在板子上的話,是只要將Qt Versions指定為Embedded再編譯就可以了嗎?
回覆刪除還是說需要將編譯完的檔案複製到板子上呢?
謝謝!
如要移植至嵌入式系統(Andes Core)上執行,
回覆刪除1. 先將準備2G的SD卡,format成ext3格式.
2. 注意OpenCV要編譯兩次,一包是for X86的函式庫,一包是Andes core的函式庫,可以修改./configure --prefix=/usr/local/opencv/"X86 or andes core"路徑來分類,將for Andes core架構編譯所產生的lib與include下的函式庫複製至SD卡上.
3. 使用Qt Creator IDE編寫程式,先在Qt versions設定X86架構gcc下編譯.
4. X86架構驗證沒有問題,再Qt versions設定Andes Core架構的nds32le-linux-gcc重新編譯.
5. 使用重新編譯過執行檔複製至SD卡,再由板子上執行,如果覺得使用SD卡很麻煩可以使用NFS的方式.
你好,在板子上的opencv是否無法使用opencv讀取圖檔以及cvNamedWindow等函式呢?
回覆刪除我使用Qt編譯andes版本時,是將.pro檔內修改為指向編譯好的andes版本的opencv
INCLUDEPATH += /usr/local/opencv/andes/include/opencv/
LIBS += /usr/local/opencv/andes/lib/libcv.so \
/usr/local/opencv/andes/lib/libcvaux.so \
/usr/local/opencv/andes/lib/libcxcore.so \
/usr/local/opencv/andes/lib/libhighgui.so \
/usr/local/opencv/andes/lib/libml.so
但這樣會出現錯誤::: error: [Test] Error 1
因為編譯x86版本時可以執行,不知道是我哪個步驟發生錯誤呢?
謝謝!
To 樓上匿名者:
回覆刪除1. 抱歉OpenCV函式庫的問題,我不是很了解,因為我只是做移植的動作,並沒有實際拿來開發,不過基本上你configure加入的參數可以編譯過,就一定可以使用.
2. 你的步驟與我不同,我在X86架構編譯函式庫類型是shared(.so),而在andes core下是編譯成static(.a),可是你在Qt指定Andes core下卻呼叫.so檔,可否確認一下你使用Andes的編譯器(nds32le-linux-g++ 抱歉上面打錯了,後來才想起來OpenCV使用C++開發的)編譯出來函式庫的結果.
要在andes core下執行上一章節的程式,還需要移植GTK+ 2.x(這部分是因為OpenCV2的函式庫有呼叫GTK+圖形介面函式庫).
回覆刪除不好意思,請問關於如何將gtk移植到andes平台上呢?
回覆刪除網路上好像沒有相關的資料,不知您是否有移植過呢? 謝謝
To 匿名者:
回覆刪除我這兩天有空,我會試試看在Andes Core執行OpenCV,測試成功會在部落格上公佈做法...
To 匿名者:
回覆刪除我已經測試成功可以在AndesCore run OpenCV,我需要把報告整理一下,因為賣豆花很忙碌...
不好意思,麻煩您了,謝謝
回覆刪除To 樓上匿名者:
回覆刪除1. 之前你編譯出.so檔也是可以用的,沒有問題.
2. 在嵌入式系統上因為沒有GTK 2.X,因此在編譯時參數就沒有加入,但是OpenCV中highgui.h函式庫會呼叫到GTK 2.X,因此highgui.h這個函式庫無法使用,請勿在程式內加入,嵌入式系統都是直接寫入FrameBuffer顯示畫面.
3. 網路上與OpenCV內的sample code都是for X86架構的程式,因此需要修改(抱歉我對OpenCV的函式庫不熟).
可以參考下列網站移植說明:
回覆刪除http://blog.csdn.net/mkhgg/archive/2010/07/30/5776409.aspx