私は共有ライブラリを構築しようとしています。最終的には、be32tohとle32tohへの参照を使用するコードをクロスコンパイルします。このコードをビルドして実行可能ファイルを作成しても、エラーは発生しません。
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= ubertooth.c ubertooth_helper.c
LOCAL_MODULE := ubertooth
LOCAL_C_INCLUDES += jni/libusb jni/libbtbb
LOCAL_SHARED_LIBRARIES := libc libusb libbtbb
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
include $(BUILD_EXECUTABLE)
ここでは正常にコンパイルされます。
Compile thumb : ubertooth <= ubertooth.c
Compile thumb : ubertooth <= ubertooth_helper.c
Executable : ubertooth
Install : ubertooth => libs/armeabi/ubertooth
ただし、Android.mkの1行を変更するだけで共有ライブラリとしてビルドしようとすると、次のようになります。
include $(CLEAR_VARS)
...
include $(BUILD_SHARED_LIBRARY)
次のエラーが発生します。
Compile thumb : ubertooth <= ubertooth.c
Compile thumb : ubertooth <= ubertooth_helper.c
SharedLibrary : libubertooth.so
./obj/local/armeabi/objs-debug/ubertooth/ubertooth.o: In function `stream_rx_file':
ubertooth.c:224: undefined reference to `be32toh'
./obj/local/armeabi/objs-debug/ubertooth/ubertooth.o: In function `cb_lap':
ubertooth.c:281: undefined reference to `le32toh'
./obj/local/armeabi/objs-debug/ubertooth/ubertooth.o: In function `cb_hop':
ubertooth.c:417: undefined reference to `le32toh'
./obj/local/armeabi/objs-debug/ubertooth/ubertooth.o: In function `cb_btle':
ubertooth.c:506: undefined reference to `le32toh'
collect2: ld returned 1 exit status
共有ライブラリをビルドするときにこのリンクエラーが発生する理由はわかりませんが、実行可能ファイルをビルドするときはわかりません。また、共有ライブラリを構築したい場合、不足しているものに適切にリンクするにはどうすればよいですか?