我试图建立一个共享库,最终交叉编译一段使用对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中的一行来将其构建为共享库时:
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
我不明白为什么在构建共享库时会出现此链接错误,而在构建可执行文件时却不会.而且,如果我想构建共享库,如何正确链接到我所缺少的东西?
Here is ubertooth.c
解决方法:
好吧,显然这些宏在sys / endian.h中的NDK中的命名不同:
__uint64_t htobe64(__uint64_t);__uint32_t htobe32(__uint32_t);__uint16_t htobe16(__uint16_t);__uint64_t betoh64(__uint64_t);__uint32_t betoh32(__uint32_t);__uint16_t betoh16(__uint16_t);__uint64_t htole64(__uint64_t);__uint32_t htole32(__uint32_t);__uint16_t htole16(__uint16_t);__uint64_t letoh64(__uint64_t);__uint32_t letoh32(__uint32_t);__uint16_t letoh16(__uint16_t);
所以,我用letoh32和betoh32
总结以上是内存溢出为你收集整理的使用NDK进行交叉编译,对le32toh和be32toh的未定义引用全部内容,希望文章能够帮你解决使用NDK进行交叉编译,对le32toh和be32toh的未定义引用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)