- 发现有些可执行文件需要依赖某些文件,但依赖的文件是链接方式
直接把链接方式放到板子上肯定不行,解决办法:把链接对应的源文件放到板子上,然后把源文件改名为链接的名字。
- 比如 BasicService依赖的文件如下
- 查看库文件:发现libstdc++.so.6是链接文件,真正的文件是libstdc++.so.6.0.28【因为最大是 21M】
- 把libstdc++.so.6.0.28放到板子上,然后把libstdc++.so.6.0.28改名为libstdc++.so.6,然后程序就可以跑起来。
参考:交叉编译及运行_L7256的博客-CSDN博客第三点
在交叉编译的时候发现:
pc123@ubuntu:~/Public/workspace/toolchain/AG550/linuxptp$ make DEPEND ts2phc_pps_source.c /bin/sh: 3: /home/pc123/Public/workspace/toolchain/AG550/ql-ag550qcn-le20-gcc820-v1-toolchain/gcc/usr/bin/arm-oe-linux-gnueabi/arm-oe-linux-gnueabi-gcc: not found于是ldd 编译器发现:依赖的库在本地一个没有的位置/opt/ql_crosstools/
===》解决办法:2选1
(1)在本地创建/opt/ql_crosstools这个目录,并按照图中的路径软连接到ld-linux-x86-64.so.2
(2) 让arm-oe-linux-gnueabi-gcc新建一个软连接到linux-x86-64.so.2 【即执行./ql_relocate_sdk.sh】
pc123@ubuntu:~/Public/workspace/toolchain/AG550/linuxptp$ make "/home/pc123/Public/workspace/toolchain/AG550/ql-ag550qcn-le20-gcc820-v1-toolchain/gcc/usr/bin/arm-oe-linux-gnueabi/"arm-oe-linux-gnueabi-gcc -Wall -DVER=3.1-00161-g6c42e5c-dirty -D_GNU_SOURCE -DHAVE_CLOCK_ADJTIME -DHAVE_POSIX_SPAWN -DHAVE_ONESTEP_SYNC -c -o ptp4l.o ptp4l.c In file included from /home/pc123/Public/workspace/toolchain/AG550/ql-ag550qcn-le20-gcc820-v1-toolchain/gcc/usr/lib/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/include-fixed/syslimits.h:7, from /home/pc123/Public/workspace/toolchain/AG550/ql-ag550qcn-le20-gcc820-v1-toolchain/gcc/usr/lib/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/include-fixed/limits.h:34, from ptp4l.c:20: /home/pc123/Public/workspace/toolchain/AG550/ql-ag550qcn-le20-gcc820-v1-toolchain/gcc/usr/lib/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/8.2.0/include-fixed/limits.h:194:61: error: no include path in which to search for limits.h #include_next/* recurse down to the real one */ ^ ptp4l.c:21:10: fatal error: stdio.h: No such file or directory #include ^~~~~~~~~ compilation terminated. <builtin>: recipe for target 'ptp4l.o' failed make: *** [ptp4l.o] Error 1
参考:交叉编译及运行_L7256的博客-CSDN博客 的第一点