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

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-23 17:19
    关注

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

    评论
  • lunhui2016 2018-03-24 20:15
    关注

    你链接的库也需要交叉编译生成才可用,你可以用file命令看看你链接的库是什么架构的

    评论
  • 聪明的小鹿 2018-03-25 16:59
    关注

    其实我的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

    评论
  • 聪明的小鹿 2018-03-28 22:54
    关注

    终于解决了,是因为我只指定的动态库的路径,没有指定名字导致的。
    错误的情况:
    arm-linux-gcc -I$blue/include -L$blue/lib -o simplescan2 simplescan.c
    错误的信息
    /tmp/ccIt9adp.o: In function main':
    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

    正确的使用
    arm-linux-gcc -I$blue/include -L$blue/lib -lbluetooth -o simplescan simplescan.c

    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 centos7.6进不去系统,卡在数字7界面
  • ¥15 Tensorflow采用interpreter.allocate_tensors()分配内存出现ValueError: vector too long报错
  • ¥15 使用CGenFF在线生成血红素辅基拓扑结构遇到问题
  • ¥15 在fragment使用okhttp同步上传文件,能不能在fragment销毁后还可以继续上传文件?
  • ¥20 matlab代码实现可达矩阵形成骨骼矩阵
  • ¥15 关于地板的木纹和图库中的匹配的
  • ¥30 机器学习预测疾病模型流程疑问
  • ¥50 2048Python实现
  • ¥15 使用ads进行低噪放仿真没有结果且不报错
  • ¥15 关于#python#的问题:有偿求一个千寻框架找书机器人插件
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部