聪明的小鹿 2018-03-23 07:43 采纳率: 0%
浏览 6136
已结题

arm-fsl-linux-gnueabi-gcc 交叉编译工具链不能正常链接库

  1. 使用gcc -o simplescan simplescan.c -lbluetooth 可以编译程序。

  2. arm-fsl-linux-gnueabi-gcc -o simplescan simplescan.c -lbluetooth
    这样编译程序时提示找不头文件。

  3. arm-fsl-linux-gnueabi-gcc -o simplescan simplescan.c -I/usr/include/ -I/usr/include/i386-linux-gnu
    手动设置头文件路径后,提示找不到库
    /opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/../lib/gcc/arm-fsl-linux-gnueabi/4.6.2/../../../../arm-fsl-linux-gnueabi/bin/ld: cannot find -lbluetooth
    collect2: ld returned 1 exit status

  4. 手动指定库路径编译
    arm-fsl-linux-gnueabi-gcc -o simplescan simplescan.c -I/usr/include/ -I/usr/include/i386-linux-gnu -L/usr/lib/i386-linux-gnu
    编译提示
    simplescan.c:(.text+0x84): undefined reference to hci_get_route'
    simplescan.c:(.text+0x90): undefined reference to
    hci_open_dev'
    simplescan.c:(.text+0x11c): undefined reference to hci_inquiry'
    simplescan.c:(.text+0x170): undefined reference to
    ba2str'
    simplescan.c:(.text+0x1c8): undefined reference to `hci_read_remote_name'
    collect2: ld returned 1 exit status

5.使用arm-fsl-linux-gnueabi-nm -D bluetooth_build/lib/libbluetooth.so.3.13.0
查看库里函数,函数也存在。

000061e8 T hci_get_route
000063bc T hci_inquiry
00006ab4 T hci_le_add_white_list
00006c90 T hci_le_clear_white_list
00008ca0 T hci_le_conn_update
00008b44 T hci_le_create_conn
00006c04 T hci_le_read_white_list_size
00006b5c T hci_le_rm_white_list
00008ac8 T hci_le_set_advertise_enable
00008988 T hci_le_set_scan_enable
00008a10 T hci_le_set_scan_parameters
00005bd0 T hci_lmtostr
00005b98 T hci_lptostr
00006520 T hci_open_dev

这是什么情况?

补充问题:

其实我的bluetooth的链接也已经编译了,使用-L指向我的链接库时,也是提示没有那些函数。
因为gcc编译可以通过,我就想着链接一下gcc用的动态库看可不可以通过。结果还是一样的。

所以百思不得其解。找不到要往哪个方向查了。

使用nm 对比了i386的蓝牙库和用交叉工具编译的蓝牙库,有没太大的差异
这是我的库
file work/bluetooth/bluetooth_build/lib/libbluetooth.so.3.13.0
work/bluetooth/bluetooth_build/lib/libbluetooth.so.3.13.0: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped

  • 写回答

4条回答 默认 最新

  • 时雨大人 2018-03-24 01:19
    关注

    交叉编译需要先把依赖的库也交叉编译,你这个问题是bluetooth没有交叉编译过,我看你链接的库和头文件还是i386的,明显错误,去下载一份bluetooth的源码交叉编译先吧,如果你搞不清楚动态链接和静态链接,建议你编译的时候先用静态链接的方法,不然到时候放板子跑还有问题

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)