[Armadillo:05150] Re: ライブラリのコンパイル方法

mizo email@hidden
2010年 5月 7日 (金) 14:00:13 JST


溝渕です。

佐原拓也 wrote:
> 1. libusbのクロス版を作成&インストール
> 2. libftdi Version 0.17をarmクロス用にmake&インストール
> 3. 自分のアプリをmake
>   リンク時のオプションに-lftdiをつければいいはず。
>  
>  そして
>  3.で自分のアプリをmakeしたのですが、最初と同じエラーになりました。
>  元のリンク -lftdi2xx をコメントアウトし、-lftdiusb に変更したのですが、
>  リンクのオプション設定が間違っていますでしょうか。 

FT2232Hに対応したライブラリは2種類あります。

1. D2xx
2. libFTDI

1.はFTDIが公開している公式版のライブラリです。x86用のバイナリのみ配布し
ているためarmでは使用できないようです。2.はオープンソースライブラリで
す。ソースが公開されているため、arm用にビルド可能です。

1.と2.では、それぞれ関数に互換性が無いようです。エラーログに出ている
FT_Write()はD2xx用の関数なので、使用することができません。

以下のコマンドを入力すると、libFTDIにFT_Write()が含まれていないことがわ
かると思います。
[ATDE2]$ wget
http://www.intra2net.com/en/developer/libftdi/download/libftdi-0.17.tar.gz
[ATDE2]$ tar zxvf libftdi-0.17.tar.gz
[ATDE2]$ cd libftdi-0.17
[ATDE2]$ grep -r FT_Write .

libFTDIを使用する場合、FT_Write()はftdi_write_data()で代用することができ
ると思いますがいかがでしょうか?

以上です。

> Makefileの内容
> ここから
> # ROOTDIR=/usr/src/atmark-dist-20100310
> ifndef ROOTDIR
> ROOTDIR ?= ../atmark-dist-20100310
> endif
> ROMFSDIR =$(ROOTDIR)/romfs
> ROMFSINST= romfs-inst.sh
> PATH     := $(PATH):$(ROOTDIR)/tools
> UCLINUX_BUILD_USER = 1
> include $(ROOTDIR)/.config
> LIBCDIR = $(CONFIG_LIBCDIR)
> include $(ROOTDIR)/config.arch
> EXEC = test
> OBJS = test.o
> all: $(EXEC)
> $(EXEC): $(OBJS)
> # $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS) -lftd2xx
>  $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS) -lftdi
> clean:
>  -rm -f $(EXEC) *.elf *.gdb *.o *~
> romfs:
>  $(ROMFSINST) /bin/$(EXEC)
> %.o: %.c
>  $(CC) -c $(CFLAGS) -o $@ $<
> ここまで。
>  
> エラーは、最初と以下のように一緒です。
> email@hidden:~/test$ <mailto:email@hidden:~/test$> make
> arm-linux-gnu-gcc    -L../atmark-dist-20100310/lib -o test test.o -lc 
> -lgcc  -lftdi
> test.o: In function `ae2_write_ana':
> test.c:(.text+0x40): undefined reference to `FT_Write'
> test.c:(.text+0x6c): undefined reference to `FT_Write'
> test.o: In function `ae2_write_decb':
> test.c:(.text+0x1b8): undefined reference to `FT_Write'
> test.c:(.text+0x1e4): undefined reference to `FT_Write'
>  :上記と同じ繰り返し
> collect2: ld returned 1 exit status
> make: *** [test] エラー 1
> email@hidden:~/test$ <mailto:email@hidden:~/test$>




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