编程语言与高级语言虚拟机杂谈仮 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了,就很难受