目次: OpenCL
先日(2018年11月14日の日記参照)動かしたOpenVX + OpenCVのデモをAArch64上でも動かそうと思います。クロスコンパイルではなくARM上でセルフコンパイルします。環境はDebian 9、ボードはROCKPro64です。
前回同様OpenVXライブラリをビルドする必要がありますが、単純にmakeするとビルドに失敗します。
[GCC] Compiling C99 vx_debug.c gcc: error: unrecognized argument in option '-mabi=aapcs-linux' gcc: note: valid arguments to '-mabi=' are: ilp32 lp64 gcc: error: unrecognized command line option '-mapcs'; did you mean '--specs'? gcc: error: unrecognized command line option '-mno-sched-prolog'; did you mean -Wno-sign-promo'? gcc: error: unrecognized command line option '-mno-thumb-interwork'; did you mean '-fno-sched-interblock'? concerto/finale.mak:289: recipe for target '/home/katsuhiro/projects/openvx/out/LINUX/aarch64/release/module/debug/vx_debug.o' failed
Makefileに不要なオプションが指定されていてビルドが失敗しているようなので、削除します。
diff --git a/concerto/compilers/gcc.mak b/concerto/compilers/gcc.mak
index aca2556..0295e39 100644
--- a/concerto/compilers/gcc.mak
+++ b/concerto/compilers/gcc.mak
@@ -125,9 +125,9 @@ endif
endif
ifeq ($(TARGET_FAMILY),ARM)
-$(_MODULE)_COPT += -mapcs -mno-sched-prolog -mno-thumb-interwork
+#$(_MODULE)_COPT += -mapcs -mno-sched-prolog -mno-thumb-interwork
ifeq ($(TARGET_OS),LINUX)
-$(_MODULE)_COPT += -mabi=aapcs-linux
+#$(_MODULE)_COPT += -mabi=aapcs-linux
endif
endif
ちなみにcmakeによるビルドも可能ですが、ARMに対応できていないように見えます。
diff --git a/cmake_utils/CMake_linux_tools.cmake b/cmake_utils/CMake_linux_tools
.cmake
index caaa017..dc2371f 100644
--- a/cmake_utils/CMake_linux_tools.cmake
+++ b/cmake_utils/CMake_linux_tools.cmake
@@ -32,10 +32,10 @@ if(BUILD_X64)
else()
if (TARGET_CPU STREQUAL "Atom")
# architecture will be according to ATOM
- set(ARCH_BIT -m32 )
+ # set(ARCH_BIT -m32 )
else ()
# need to force a more modern architecture than the degault m32 (i386).
- set(ARCH_BIT "-m32 -march=core2" )
+ # set(ARCH_BIT "-m32 -march=core2" )
endif (TARGET_CPU STREQUAL "Atom")
endif()
正しい直し方ではありませんが、とりあえずx86向けの設定を改造して、x86用のオプションを外すとビルドが通ります。
OpenVXライブラリのビルドが通ったら、サンプルをビルドします。
$ cd openvx_tutorial/tutorial_exercises/solution_exercise1 $ g++ -I ../include -L /path/to/openvx/out/LINUX/aarch64/release/ solution_exercise1.cpp \ -lopencv_imgproc -lopencv_highgui -lopencv_core -lopenvx
もしcmakeでライブラリを作った場合は、ライブラリの生成先ディレクトリが異なります。下記のようにします。
$ cd openvx_tutorial/tutorial_exercises/solution_exercise1 $ g++ -I ../include -L /path/to/openvx/build/sample/framework/ solution_exercise1.cpp \ -lopencv_imgproc -lopencv_highgui -lopencv_core -lopenvx
実行する際は、HDMI出力などのGUI画面に表示してもよいですし、vncserverなどの画面にも表示できます。下記の例はvncserverに表示する例です。
$ DISPLAY=:1 \ LD_LIBRARY_PATH=/path/to/openvx/out/LINUX/aarch64/release/ \ ./a.out
もしcmakeでビルドしたライブラリを使う場合、ライブラリがバラバラのディレクトリに置かれているため、LD_LIBRARY_PATHに指定するパスがやや長くなります。
$ DISPLAY=:1 \ LD_LIBRARY_PATH=/path/to/openvx/build/sample/framework/:/path/to/openvx/build/sample/targets/c_model/:/path/to/openvx/build/sample/vxu/:/path/to/openvx/build/libraries/extras/:/path/to/openvx/build/libraries/debug/ \ ./a.out
もしcmakeでビルドしたライブラリでトラブルが起きたときは、cmake -DCMAKE_BUILD_TYPE=RelWithDebInfoと指定してデバッグ情報を有効にしてビルドすることで、デバッグしやすくなります。
TightVNCサーバーを使うとアプリケーションの実行時に下記の警告が出ます。
Xlib: extension "RANDR" missing on display ":1".
警告が出ても動作はするのですが、気になる方は下記のようにTigerVNCをインストールするなど、RANDRに対応したVNCサーバーを使ってください。
# apt-get install tigervnc-standalone-server
< | 2019 | > | ||||
<< | < | 03 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | - | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | - | - | - | - | - | - |
合計:
本日: