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

大野徹 email@hidden
2013年 10月 11日 (金) 14:23:48 JST


大野と申します。
よろしくお願いします。

【ターゲット】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 メーリングリストの案内