FC2カウンター FPGAの部屋 Ubuntu 16.04 上のVivado HLS 2017.2 でOpenCV を使用したプロジェクトでエラー発生

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Ubuntu 16.04 上のVivado HLS 2017.2 でOpenCV を使用したプロジェクトでエラー発生

Ubuntu 16.04 上のVivado HLS 2017.2 でOpenCV を使用したプロジェクトで libjpeg.so.62 と libtiff.so.3 が無いと言われてコンパイルできなかったので、解決方法を書いておく。なお、VirtualBox 上のUbuntu 16.04 上のVivado HLS 2016.4 でも同様だった。

Vivado HLS 2017.2 の straight_dataset_bmp プロジェクトで、C シミュレーションをしようとしている。
とりあえず、最初の段階のコードなのだが、示しておこう。
straight_dataset_bmp.h を示す。(enscript を使用してHTML化した)


// straight_dataset_bmp.h
// 2017/07/24 by marsee
//

#ifndef __STRAIGHT_DATASET_BMP_H__
#define __STRAIGHT_DATASET_BMP_H__

#include "hls_video.h"

#define BMP_HEIGHT 600
#define BMP_WIDTH 800

#define REDUCTION_RATIO 0.075 // 1/13.3333... 60x45

#define DATASET_HEIGHT 56
#define DATASET_WIDTH 10

#define STRAIGHT_BMP_FILE_NAME straight
#define LEFT_TRUN_BMP_FILE_NAME left_turn
#define RIGHT_TRUN_BMP_FILE_NAME right_turn
#define STRAIGHT_NUM_OF_IMAGE 10
#define LEFT_TRUN_NUM_OF_IMAGE 10
#define RIGHT_TRUNNUM_OF_IMAGE 10

typedef hls::Scalar<3, unsigned char> RGB_PIXEL;
typedef hls::Mat<BMP_HEIGHT, BMP_WIDTH, HLS_8UC3> RGB_IMAGE;
typedef hls::Mat<BMP_HEIGHT, BMP_WIDTH, HLS_8UC1> GRAY_IMAGE;

#endif


straight_dataset_bmp.cpp を示す。


// straight_dataset_bmp.cpp
// 2017/07/24 by marsee
//

#include <iostream>
#include "hls_opencv.h"
#include "straight_dataset_bmp.h"

int main(){
char straight_fn[256] = "straight";
char left_turn_fn[256] = "left_turn";
char right_turn_fn[256] = "right_turn";
char bmp_file[256];

int i=0;
// refereed to http://opencv.jp/cookbook/opencv_img.html
// straight
//for(int i=0; i<STRAIGHT_NUM_OF_IMAGE; i++){
sprintf(bmp_file, "straight%d.bmp", straight_fn, i);
cv::Mat straight_img = cv::imread(bmp_file,1);
if(straight_img.empty())
return(-1);
cv::Mat reduct_img(straight_img.rows*0.075, straight_img.cols*0.075, straight_img.type());
cv::resize(straight_img, reduct_img, reduct_img.size(), cv::INTER_CUBIC);
cv::Mat gray_img;
cv::cvtColor(straight_img, gray_img, CV_BGR2GRAY);
sprintf(bmp_file, "straight_RED%d.bmp", i);
cv::imwrite(bmp_file, gray_img);
//}

return(0);
}


Cシミュレーションを行うとエラーだった。
wl_data_test_1_170728.png

エラーの内容を貼っておく。


Starting C simulation ...
/opt/Xilinx/Vivado_HLS/2017.2/bin/vivado_hls /home/masaaki/Vivado_HLS/straight_dataset_bmp/solution1/csim.tcl
INFO: [HLS 200-10] Running '/opt/Xilinx/Vivado_HLS/2017.2/bin/unwrapped/lnx64.o/vivado_hls'
INFO: [HLS 200-10] For user 'masaaki' on host 'masaaki-H110M4-M01' (Linux_x86_64 version 4.4.0-87-generic) on Fri Jul 28 05:06:19 JST 2017
INFO: [HLS 200-10] On os Ubuntu 16.04.2 LTS
INFO: [HLS 200-10] In directory '/home/masaaki/Vivado_HLS'
WARNING: [HLS 200-40] Environment variable 'C_INCLUDE_PATH' is set to :/usr/local/cuda/include.
INFO: [HLS 200-10] Opening project '/home/masaaki/Vivado_HLS/straight_dataset_bmp'.
INFO: [HLS 200-10] Opening solution '/home/masaaki/Vivado_HLS/straight_dataset_bmp/solution1'.
INFO: [SYN 201-201] Setting up clock 'default' with a period of 10ns.
INFO: [HLS 200-10] Setting target device to 'xc7z020clg400-1'
INFO: [SIM 211-2] *************** CSIM start ***************
INFO: [SIM 211-4] CSIM will launch GCC as the compiler.
Compiling ../../../straight_dataset_bmp.cpp in debug mode
Generating csim.exe
Makefile.rules:349: ターゲット 'csim.exe' のレシピで失敗しました
/usr/bin/ld: warning: libjpeg.so.62, needed by /opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libtiff.so.3, needed by /opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `TIFFReadEncodedStrip' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_read_scanlines' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_alloc_huff_table' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_set_defaults' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_write_scanlines' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_finish_compress' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `TIFFReadEncodedTile' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `TIFFGetField' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `TIFFReadRGBATile' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `TIFFScanlineSize' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `TIFFSetField' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_set_quality' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `TIFFSetWarningHandler' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_resync_to_restart' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `TIFFIsTiled' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `TIFFWriteScanline' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_destroy_decompress' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `TIFFRGBAImageOK' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `TIFFOpen' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_CreateDecompress' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_read_header' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `TIFFReadRGBAStrip' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `TIFFSetErrorHandler' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_stdio_src' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_destroy_compress' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_stdio_dest' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `TIFFClose' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_finish_decompress' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_start_decompress' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_start_compress' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_CreateCompress' に対する定義されていない参照です
/opt/Xilinx/Vivado_HLS/2017.2/lnx64/tools/opencv/libopencv_highgui.so: `jpeg_std_error' に対する定義されていない参照です
collect2: ld returned 1 exit status
make: *** [csim.exe] エラー 1
ERROR: [SIM 211-100] CSim file generation failed: compilation error(s).
INFO: [SIM 211-3] *************** CSIM finish ***************
5
while executing
"source /home/masaaki/Vivado_HLS/straight_dataset_bmp/solution1/csim.tcl"
invoked from within
"hls::main /home/masaaki/Vivado_HLS/straight_dataset_bmp/solution1/csim.tcl"
("uplevel" body line 1)
invoked from within
"uplevel 1 hls::main {*}$args"
(procedure "hls_proc" line 5)
invoked from within
"hls_proc $argv"
Finished C simulation.


libjpeg.so.62 と libtiff.so.3 が無いと言われているみたいだ。

まずは、libjpeg.so.62 をなんとかしよう。
Re: Vivado HLS 2013.2 fails on ubuntu due to missing libtiff3 ”を参考にして、libjpeg62-dev をインストールした。
sudo apt-get install libjpeg62-dev
wl_data_test_2_170728.png

もう一度、Vivado HLS でCシミュレーションを行った。
wl_data_test_3_170728.png

libtiff.so.3 だけになった。

libtiff.so.3 は、”libtiff.so.3, undefined reference to `TIFFReadEncodedStrip'”を参考にして、tiff-3.9.7 をインストールした。
まずは、http://download.osgeo.org/libtiff/に行って、tiff-3.9.7.zip をダウンロードした。
wl_data_test_4_170728.png

tiff-3.9.7.zip を解凍して、tiff-3.9.7 ディレクトリにコピー&ペーストした。
wl_data_test_5_170728.png

cd tiff-3.9.7
ls
./configure

wl_data_test_6_170728.png

wl_data_test_7_170728.png

ステータスを示す。


Libtiff is now configured for x86_64-unknown-linux-gnu

Installation directory: /usr/local
Documentation directory: ${prefix}/share/doc/tiff-3.9.7
C compiler: gcc -g -O2 -Wall -W
C++ compiler: g++ -g -O2
Enable runtime linker paths: no
Enable linker symbol versioning: no
Support Microsoft Document Imaging: yes

Support for internal codecs:
CCITT Group 3 & 4 algorithms: yes
Macintosh PackBits algorithm: yes
LZW algorithm: yes
ThunderScan 4-bit RLE algorithm: yes
NeXT 2-bit RLE algorithm: yes
LogLuv high dynamic range encoding: yes

Support for external codecs:
ZLIB support: yes
Pixar log-format algorithm: yes
JPEG support: yes
Old JPEG support: yes
ISO JBIG support: yes

C++ support: yes

OpenGL support: yes


make
成功した。
wl_data_test_8_170728.png

sudo cp libtiff/.libs/libtiff.so.3* /opt/Xilinx/Vivado_HLS/2017.2/lib/lnx64.o/
sudo ldconfig

wl_data_test_10_170728.png
(注:Vivado HLS 2016.4 は”Re: Vivado HLS 2013.2 fails on ubuntu due to missing libtiff3 ”の通りのパスにコピーしたところ、うまく行った。このディスティネーション・ディレクトリにコピーする必要があるのは、2017.1 からなのかもしれない? /usr/lib64 にコピーできたということなので、Vivado HLSのバージョンではなく、Ubuntuのバージョンですよね? ともかく、/opt/Xilinx/Vivado_HLS/<Vivado HLSのバージョン番号>/lib/lnx64.o/にコピーすれば良いのでは?と思います)

再々度、Vivado HLS でCシミュレーションを行った。
wl_data_test_11_170729.png

ライブラリのエラーはなくなった。このエラーは画像ファイルが無いので出ている。
  1. 2017年07月29日 06:39 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/3869-0530ab39
この記事にトラックバックする(FC2ブログユーザー)