[移植"myslam"到zynq上的arm手记] 3 - hello world

编程语言与高级语言虚拟机杂谈仮 2018-03-23

1. hello world

没毛病,在arm上成功运行

2. useEigen

第一次报错:

./eigenMatrix: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./eigenMatrix)
./eigenMatrix: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./eigenMatrix)

板子上的系统里的libstdc++.so.6太老了,到xilinx的那坨里头找,然后替换

注意是armhf架构,找gnueabihf

找到路径是 /media/albireo/backup/opt/Xilinx/SDK/2017.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/lib/libstdc++.so.6

看到link target: libstdc++.so.6.0.22

把 libstdc++.so.6.0.22 撸到板子上

cp libstdc++.so.6.0.22 /usr/lib/arm-linux-gnueabihf/libstdc++.so.6.0.22
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.22 libstdc++.so.6

再次尝试,第二次报错

./eigenMatrix: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.18' not found (required by /usr/lib/arm-linux-gnueabihf/libstdc++.so.6)
./eigenMatrix: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.17' not found (required by /usr/lib/arm-linux-gnueabihf/libstdc++.so.6)

同样的操作

结果发现炸了,libc好像太底层了, rm掉libc.so.6之后,ln等基础的命令都无法使用了(当然,这时候如果关机的话就没法启动了,虽然也并没有什么事情

因为问题出在没了libc.so.6,找不到库了,直接用LD_PRELOAD指定使用libc-2.15.so,链接上

LD_PRELOAD=libc-2.15.so ln -s libc-2.22.so libc.so.6

链接上libc-2.22.so之后发现还是不行,仅仅libc-2.15.so换掉并不行,还会报其他的库的错,尝试依次替换,没有什么卵用。把2.15的重新链接回去,放弃这种搞法。

尝试其他办法。报错原因是编译用的xilinx给的交叉编译器和板子上的arm-linux-gnueabihf不一样(首先版本就不一样,其他还有啥区别就不知道了),应该弄成一样就行了

去linardo那找他们提供的最新的filesystem以及对应的编译器,分别是15.06和4.8,选择gnueabihf

http://releases.linaro.org/archive/15.06/ubuntu/vivid-images/gnome/

http://releases.linaro.org/archive/15.06/components/toolchain/binaries/4.8/armeb-linux-gnueabihf/

下载一看,里面的各种so的版本真的都是一样耶(废话

文件系统弄到sd卡上,把xilinx的交叉编译器扔掉,换成新的,加入环境变量

export PATH=/home/albireo/lib/gcc-linaro-4.8-2015.06-x86_64_arm-linux-gnueabihf/bin:$PATH

重新编译hello world和useEigen,撸到板子上,运行通过。就很舒服

然而板子上装的新系统不知道为啥连不上network了,就很难受

相关推荐