LoginSignup
2

More than 5 years have passed since last update.

ZED SDKをqmakeでクロスコンパイルする方法(Jetson TX1向け)

Last updated at Posted at 2019-02-16

ZED SDKのインストール

Jetson向けZED SDKをダウンロードして、Jetsonにインストールする。
https://www.stereolabs.com/developers/release/

jetson$ chmod +x ZED_SDK_JTX1_v*.run
jetson$ ./ZED_SDK_JTX1_v*.run

ビルド方法を確認

サンプルプログラムのビルド方法はこちらに書かれている。
CMakeでビルドをしており、以下のファイルでパス等を確認できる。

jetson$ vi /usr/local/zed/zed-config.cmake
zed-config.cmake
# ===================================================================================
#  The ZED CMake configuration file
#
#  Usage from an external project:
#    In your CMakeLists.txt, add these lines:
#
#    SET(ZED_DIR "/usr/local/zed/")
#    FIND_PACKAGE(zed REQUIRED )
#    INCLUDE_DIRECTORIES(${ZED_INCLUDE_DIRS})
#    link_directories(${ZED_LIBRARY_DIR})
#    TARGET_LINK_LIBRARIES(MY_TARGET_NAME ${ZED_LIBRARIES})
#
#    This file will define the following variables:
#      - ZED_LIBRARIES           : The list of dynamic libraries (ZED SDK) to links against.
#      - ZED_STATIC_LIBRARIES    : The list of static libraries (ZED SDK) to links against.
#      - ZED_STATIC_DEP_LIBRARIES: The list of static libraries (ZED SDK dependencies) to links against.
#      - ZED_LIBRARY_DIR         : The directory where lib files are.
#      - ZED_INCLUDE_DIRS        : The ZED include directories.
#      - ZED_CUDA_VERSION        : The CUDA version required by the ZED SDK.
#      - CUDA_NPP_LIBRARIES_ZED  : The CUDA NPP libraries used by the ZED SDK.
# ===================================================================================

set(ZED_FOUND FALSE CACHE BOOL "" FORCE)

set(ZED_INCLUDE_DIRS "/usr/local/zed/include")    ★ ZED SDKのインクルードパス
set(ZED_LIBRARY_DIR "/usr/local/zed/lib")       ★ ZED SDKのライブラリパス

if(ZED_INCLUDE_DIRS)
    set(ZED_LIBRARIES
        "/usr/local/zed/lib/libsl_input.so"         ★ ZED SDKの共有ライブラリ
        "/usr/local/zed/lib/libsl_core.so"
        "/usr/local/zed/lib/libsl_zed.so"
    )

    set(ZED_STATIC_LIBRARIES
        "/usr/local/zed/lib/libsl_zed_static.a"      ★ ZED SDKの静的ライブラリ
        "/usr/local/zed/lib/libsl_input_static.a"
        "/usr/local/zed/lib/libsl_core_static.a"
    )

    set(ZED_FOUND TRUE CACHE BOOL "" FORCE)

    exec_program(uname ARGS -p OUTPUT_VARIABLE CMAKE_SYSTEM_NAME2)
    if (CMAKE_SYSTEM_NAME2 MATCHES "aarch64" )
        unset(CUDA_USE_STATIC_CUDA_RUNTIME CACHE)
        option(CUDA_USE_STATIC_CUDA_RUNTIME OFF)
    endif()

    SET(ZED_CUDA_VERSION 9.0)

    find_package(CUDA 9.0 EXACT REQUIRED)
    if(CUDA_FOUND)
            set(cuda_path "/usr/local/cuda-${CUDA_VERSION_MAJOR}.${CUDA_VERSION_MINOR}/lib64/") ★ CUDAのライブラリパス
            set(CUDA_NPP_LIBRARIES_ZED
                                "${cuda_path}libnppial.so"     ★ CUDAの共有ライブラリ
                                "${cuda_path}libnppisu.so"
                                "${cuda_path}libnppicc.so"
                                "${cuda_path}libnppicom.so"
                                "${cuda_path}libnppidei.so"
                                "${cuda_path}libnppif.so"
                                "${cuda_path}libnppig.so"

ホスト環境にファイルを転送する

ZED SDK

JetsonにインストールしたZED SDKのファイルを、クロスビルド環境のホストPCに転送する。
ZED SDKのライブラリやインクルードファイル等は/usr/local/zed/フォルダにインストールされている。
JetPackのrootfsフォルダで操作を行う。(IPアドレスはJetsonのIPアドレス)

host$ cd ~/JetPack/64_TX1/Linux_for_Tegra/rootfs/usr/local
host$ sudo rsync -e ssh -avz nvidia@192.168.0.16:/usr/local/zed .

ZED SDKインストール時にユーザー所有権でインストールしていたので、rootに変更しておく。
パーミッションも合わせて変更しておく。

host$ sudo chown -R root zed
host$ sudo chmod -R 755 zed

CUDA

同様に転送する。

host$ cd ~/JetPack/64_TX1/Linux_for_Tegra/rootfs/usr/local
host$ sudo rsync -e ssh -avz nvidia@192.168.0.16:/usr/local/cuda .
host$ sudo rsync -e ssh -avz nvidia@192.168.0.16:/usr/local/cuda-9.0 .

aarch64-linux-gnu

同様に転送する。

host$ cd ~/JetPack/64_TX1/Linux_for_Tegra/rootfs/usr/lib
host$ sudo rsync -e ssh -avz nvidia@192.168.0.16:/usr/lib/aarch64-linux-gnu .

シンボリックリンクの修正

以下のスクリプトを利用し、ホスト側にコピーしたシンボリックリンクをホスト向けに修正する。
https://github.com/alpqr/fixsymlinks_tx1

host$ chmod +x fixsymlinks.sh
host$ sudo ./fixsymlinks.sh ~/JetPack/64_TX1/Linux_for_Tegra/rootfs

クロスビルドで Hello ZED する

sysroot設定

Qt Creatorを起動する。
オプションでSysrootにJetPackのrootfsを指定しておくこと。
image.png

プロジェクトファイル設定

INCLUDEPATHLIBSにZEDとCUDAのパスを通す。

INCLUDEPATH += /home/ubuntu/JetPack/64_TX1/Linux_for_Tegra/rootfs/usr/local/zed/include \
               /home/ubuntu/JetPack/64_TX1/Linux_for_Tegra/rootfs/usr/local/cuda/include

LIBS += -L/home/ubuntu/JetPack/64_TX1/Linux_for_Tegra/rootfs/usr/local/zed/lib \
            -lsl_input \
            -lsl_core \
            -lsl_zed \
        -L/home/ubuntu/JetPack/64_TX1/Linux_for_Tegra/rootfs/usr/local/cuda/lib64 \
            -lnppial \
            -lnppisu \
            -lnppicc \
            -lnppicom \
            -lnppidei \
            -lnppif \
            -lnppig \
            -lnppim \
            -lnppist \
            -lnppitc \
            -lnpps \
            -lnppc

これでサンプルプログラムがqmakeでビルドできるようになる。
参考までに、QtでZED tutorial 1をビルドしたソースコードをGitHubに置いた。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2