arm-fsl-linux-gnueabi-gcc 交叉编译工具链不能正常链接库 5C
  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个回答

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

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

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

终于解决了,是因为我只指定的动态库的路径,没有指定名字导致的。
错误的情况:
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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐