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

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 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题