[Armadillo:09255] Re: Armadillo-810でOpenCVのサンプルをコンパイル時のエラーに関して

nakayama junichi email@hidden
2013年 10月 11日 (金) 17:30:11 JST


大野様

ONICOSの中山と申します。


> ---------- ホームページを元に作成したMakefile -------------
> CC = arm-linux-gnueabihf-gcc-4.6 # CrossCompiler
>
> EXEC = sample_convert
> OBJS = sample_convert.o
> LDFLAGS := -lopencv_core -lopencv_highgui -lopencv_imgproc -lm
> LDLIBS = -L"/usr/arm-linux-gnueabihf/lib"

> ---------------- 修正後のMakefile --------------------
> CC = arm-linux-gnueabihf-gcc-4.6 # CrossCompiler
>
> EXEC = sample_convert
> OBJS = sample_convert.o
> LIB = /usr/arm-linux-gnueabihf/lib

> makeを実行すると以下のエラーとなります。
> /usr/arm-linux-gnueabihf/lib/libopencv_core.a(persistence.o): In function
> `icvDoubleToString(char*, double)':
> (.text._ZL17icvDoubleToStringPcd+0x1c): undefined reference to `lrint'
> /usr/arm-linux-gnueabihf/lib/libopencv_core.a(persistence.o): In function
> `icvPuts(CvFileStorage*, char const*)':
> (.text._ZL7icvPutsP13CvFileStoragePKc+0x1c): undefined reference to 
> `gzputs'
> /usr/arm-linux-gnueabihf/lib/libopencv_core.a(persistence.o): In function
> `icvPuts(CvFileStorage*, char const*)':

lrint()関数がないというエラーが出ています。
-lmオプションがないためです。
libm.aという算術演算ライブラリが必要です。

gzputs()関数のほうは、
zlibライブラリ関連のようですが、
私にはどうもわかりません。





--------------------------------------------------
From: "大野徹" <email@hidden>
Sent: Friday, October 11, 2013 2:23 PM
To: <email@hidden>
Subject: [Armadillo:09253]Armadillo-810でOpenCVのサンプルをコンパイル時のエラーに関して

> 大野と申します。
> よろしくお願いします。
>
> 【ターゲット】Amrmadillo-810
> 【開発環境】
> VMWare Player上でATDE5(32bit版)を構築
> クロスコンパイラ arm-linux-gnueabihf-gcc-4.6
> 【動作環境】
> 以下のファイルをSDカードに書き込んでSDカードからブート
> ブートローダ:loader-armadillo810-mmcsd-v3.2.3.bin
> ユーザランド:debian-wheezy-armhf_a810_20130116.tar.gz
> カーネル:linux-a810-v1.04.bin.gz
> 【確認状況】
> 正常にSDカードからブートできています。
> 自作の簡単なサンプルをATDE5上でクロスコンパイル後、SDカードにコピーして
> Amrmadillo-810を起動後、問題なく動作しています。
>
> 【やりたいこと、及び問題点】
> http://armadillo.atmark-techno.com/howto/armadillo-810-opencv
> 上記のOpenCVサンプルをAmrmadillo-810で実行して正常動作することを確認したいの 
> 
> ですが、以下の問題が発生しています。
>
> (1)サンプルのMakefileだと共有ライブラリ(*.so)がリンクされてしまう
> ホームページのMakefileを(下記)を元にビルドするとWarningが出ますが、実行
> ファイルが生成されます。
> ---------- ホームページを元に作成したMakefile -------------
> CC = arm-linux-gnueabihf-gcc-4.6 # CrossCompiler
>
> EXEC = sample_convert
> OBJS = sample_convert.o
> LDFLAGS := -lopencv_core -lopencv_highgui -lopencv_imgproc -lm
> LDLIBS = -L"/usr/arm-linux-gnueabihf/lib"
>
> all: $(EXEC)
>
> $(EXEC): $(OBJS)
> $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)
>
> romfs:
> $(ROMFSINST) /usr/bin/$(EXEC)
>
> clean:
> ---------------------------------------------------------------
>
> ----------- ビルド時のWarning --------------------------------------
> arm-linux-gnueabihf-gcc-4.6     -c -o sample_convert.o sample_convert.c
> arm-linux-gnueabihf-gcc-4.6 -lopencv_core -lopencv_highgui
> -lopencv_imgproc -lm -o sample_convert sample_convert.o
> -L"/usr/arm-linux-gnueabihf/lib"
> /usr/lib/gcc/arm-linux-gnueabihf/4.6/../../../../arm-linux-gnueabihf/bin/ld:
> warning: ld-linux.so.3, needed by
> /usr/arm-linux-gnueabihf/lib/libpng12.so.0, not found (try using -rpath or
> -rpath-link)
> ---------------------------------------------------------------------
>
> ●実行
> SDカードにsample_convertを書き込んで、Amrmadillo-810をSDカードから起動して
> 実行すると以下のメッセージが表示されます。
> ./sample_convert: error while loading shared libraries: 
> libopencv_core.so.2.
> 3: cannot open shared object file: No such file or directory
>
> lddで確認すると確かに、共有ライブラリを参照しています。
> # ldd ./sample_convert
>        libopencv_core.so.2.3 => not found
>        libopencv_highgui.so.2.3 => not found
>        libopencv_imgproc.so.2.3 => not found
>        libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xb6eea000)
>        libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6e05000)
>        /lib/ld-linux-armhf.so.3 (0xb6f5a000)
>
> (2)静的ライブラリをリンクしてのビルドでエラー
> 共有ライブラリがないと動作しないので、静的ライブラリをリンクするように
> Makefileを修正しました。
>
> ---------------- 修正後のMakefile --------------------
> CC = arm-linux-gnueabihf-gcc-4.6 # CrossCompiler
>
> EXEC = sample_convert
> OBJS = sample_convert.o
> LIB = /usr/arm-linux-gnueabihf/lib
>
> all: $(EXEC)
>
> $(EXEC): $(OBJS)
> $(CC) -o $@ $(OBJS) $(LIB)/libopencv_core.a
> $(LIB)/libopencv_highgui.a $(LIB)/libopencv_imgproc.a $(LIB)/libm.a
>
> romfs:
> $(ROMFSINST) /usr/bin/$(EXEC)
>
> clean:
> ------------------------------------------------------
>
> makeを実行すると以下のエラーとなります。
> /usr/arm-linux-gnueabihf/lib/libopencv_core.a(persistence.o): In function
> `icvDoubleToString(char*, double)':
> (.text._ZL17icvDoubleToStringPcd+0x1c): undefined reference to `lrint'
> /usr/arm-linux-gnueabihf/lib/libopencv_core.a(persistence.o): In function
> `icvPuts(CvFileStorage*, char const*)':
> (.text._ZL7icvPutsP13CvFileStoragePKc+0x1c): undefined reference to 
> `gzputs'
> /usr/arm-linux-gnueabihf/lib/libopencv_core.a(persistence.o): In function
> `icvPuts(CvFileStorage*, char const*)':
>>> undefined referenceとなっているのでライブラリ?が足らないのようにも見えます 
> 
> が何が不足しているのでしゅうか?
>
> お手数ですがよろしくお願いします。
>
>
>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo 




armadillo メーリングリストの案内