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

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


大野様

ONICOSの中山です。

>> $(EXEC): $(OBJS)
>> $(CC) -o $@ $(OBJS) $(LIB)/libopencv_core.a
>> $(LIB)/libopencv_highgui.a $(LIB)/libopencv_imgproc.a $(LIB)/libm.a

libm.aはリンクされていますね。
失礼いたしました。



--------------------------------------------------
From: "nakayama junichi" <email@hidden>
Sent: Friday, October 11, 2013 5:30 PM
To: "Armadillo general discussion list" <email@hidden>
Subject: [Armadillo:09255] Re:Armadillo-810でOpenCVのサンプルをコンパイル時のエラーに関して

> 大野様
>
> 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 mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo 




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