2010年1月4日 星期一

OpenCV(4) 編譯OpenCV for Andes Core架構

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〞附錄下.


11 則留言:

  1. 請問要將編譯完的Opencv使用在板子上的話,是只要將Qt Versions指定為Embedded再編譯就可以了嗎?

    還是說需要將編譯完的檔案複製到板子上呢?

    謝謝!

    回覆刪除
  2. 如要移植至嵌入式系統(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的方式.

    回覆刪除
  3. 你好,在板子上的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版本時可以執行,不知道是我哪個步驟發生錯誤呢?
    謝謝!

    回覆刪除
  4. To 樓上匿名者:
    1. 抱歉OpenCV函式庫的問題,我不是很了解,因為我只是做移植的動作,並沒有實際拿來開發,不過基本上你configure加入的參數可以編譯過,就一定可以使用.

    2. 你的步驟與我不同,我在X86架構編譯函式庫類型是shared(.so),而在andes core下是編譯成static(.a),可是你在Qt指定Andes core下卻呼叫.so檔,可否確認一下你使用Andes的編譯器(nds32le-linux-g++ 抱歉上面打錯了,後來才想起來OpenCV使用C++開發的)編譯出來函式庫的結果.

    回覆刪除
  5. 要在andes core下執行上一章節的程式,還需要移植GTK+ 2.x(這部分是因為OpenCV2的函式庫有呼叫GTK+圖形介面函式庫).

    回覆刪除
  6. 不好意思,請問關於如何將gtk移植到andes平台上呢?

    網路上好像沒有相關的資料,不知您是否有移植過呢? 謝謝

    回覆刪除
  7. To 匿名者:
    我這兩天有空,我會試試看在Andes Core執行OpenCV,測試成功會在部落格上公佈做法...

    回覆刪除
  8. To 匿名者:
    我已經測試成功可以在AndesCore run OpenCV,我需要把報告整理一下,因為賣豆花很忙碌...

    回覆刪除
  9. 不好意思,麻煩您了,謝謝

    回覆刪除
  10. To 樓上匿名者:
    1. 之前你編譯出.so檔也是可以用的,沒有問題.
    2. 在嵌入式系統上因為沒有GTK 2.X,因此在編譯時參數就沒有加入,但是OpenCV中highgui.h函式庫會呼叫到GTK 2.X,因此highgui.h這個函式庫無法使用,請勿在程式內加入,嵌入式系統都是直接寫入FrameBuffer顯示畫面.
    3. 網路上與OpenCV內的sample code都是for X86架構的程式,因此需要修改(抱歉我對OpenCV的函式庫不熟).

    回覆刪除
  11. 可以參考下列網站移植說明:
    http://blog.csdn.net/mkhgg/archive/2010/07/30/5776409.aspx

    回覆刪除