我有一台带有32GB内存笔的路由器华硕RT-AC68R安装到/ opt。在它上面安装了entware,包括在平台ARMv7上本地构建程序的所有工具。路由器使用TomatoUSB固件。
我写了一个程序来支持基于通过USB连接到路由器的芯片FT245的模块。该程序在Linux x86_64上编译,可在标准Linux PC上正常运行。当然 - 必须安装制造商提供的库(FTDI)。制造商为各种平台提供这些库,包括ARMv7版本的软浮动和硬浮动。在路由器上我安装了库硬浮。 这些库是HERE
根据文档,我正在尝试在安装笔FTDI库之前编译程序。不幸的是,在启动程序后发生库错误。
下面我编译这个程序(名为arco)的方式以及在基于ARMv7的路由器上运行该程序的结果。
root@asus:/opt# gcc -Wl,-rpath=/opt/usr/local/lib -Wl,--dynamic-linker=/opt/lib/ld-linux.so.3 -L/opt/usr/local/lib -O2 -pipe -march=armv7-a -mtune=cortex-a9 -fno-caller-saves -mfloat-abi=soft -l ftd2xx arco.c -o arco
root@asus:/opt# ./arco
./arco: error while loading shared libraries: /opt/usr/local/lib/libftd2xx.so: internal error
有关我的开发环境的其他信息:
root@asus:/opt/FTDI# echo $PATH
/opt/bin:/opt/sbin:/opt/bin:/opt/sbin:/bin:/usr/bin:/sbin:/usr/sbin:/home/root:/mmc/sbin:/mmc/bin:/mmc/usr/sbin:/mmc/usr/bin:/opt/sbin:/opt/bin:/opt/usr/sbin:/opt/usr/bin:
root@asus:/opt/FTDI# echo $LD_LIBRARY_PATH
/lib:/usr/lib:/usr/local/lib:/opt/lib:/opt/usr/lib:/opt/include
root@asus:/opt/FTDI# opkg list-installed|grep gcc
gcc - 5.4.0-1
libgcc - 5.4.0-5
root@asus:/opt# uname -a
Linux asus 2.6.36.4brcmarm #5 SMP PREEMPT Tue Aug 16 22:49:47 CEST 2016 armv7l GNU/Linux
对于平台ARMv7,我相当新,但可能在我使用的编译选项中有一些东西:
-mfloat-abi=soft
安装的库是hard-float。我不知道这是不是因为期待议会同事的原因。 提前感谢您的回答!