我有一个用于指纹驱动程序的编译库(无源)。我确定它是ARM编译的,因为命令file mylib.so
说:
ELF 32位LSB共享对象,ARM,版本1(SYSV),动态链接,未剥离
但是如果我想在C ++程序中使用它们,我总是会遇到相同的错误:
加载共享库时出错:mylib.so:无法打开共享对象文件:没有这样的文件或目录
就像您看到的那样,此错误不是很明显,当然我在mylib.so路径中对变量LD_LIBRARY_PATH使用了export命令。
因此,如何知道ARM库(.so)是否与raspberry PI兼容?
-编辑-
ldd libsgfdu03.so:
not a dynamic executable
ldd libsgfdu04.so:
not a dynamic executable
ldd libsgfpamx.so:
not a dynamic executable
在SDK中,使用.so
,我有一个示例C ++程序来管理驱动程序。使用两个命令在一个makefile中进行编译:
g++ -I./ -I../include -c main.cpp
->包含一个名为“ sgfplib.h”的文件
g++ /usr/lib/arm-linux-gnueabihf/libusb.so -lpthread -lsgfpamx
-lsgfdu03 -lsgfplib -o ../bin/arm12/sgfplibtest_fdu03 main.o -L/home/pi/sdk/lib/arm12
所有路径都很好,并且在编译时没有错误报告,但是ldd
最后的可执行文件之后显示ldd sgfplibtest_fdu03
:
/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so (0xb6f76000)
libusb-0.1.so.4 => /lib/arm-linux-gnueabihf/libusb-0.1.so.4 (0xb6f5a000)
libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xb6f3b000)
libsgfpamx.so => not found
libsgfdu04.so => not found
libsgfplib.so => not found
libstdc++.so.6 => /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 (0xb6e6e000)
libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xb6dfd000)
libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xb6dd5000)
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6ca6000)
/lib/ld-linux-armhf.so.3 (0xb6f83000)
-使用debian x86编辑相同的驱动程序-
dpkg -S libsgfpamx.so
dpkg-query: no path found matching pattern *libsgfpamx.so*
ldd sgfplibtest_fdu03 :
linux-gate.so.1 => (0xb76eb000)
libusb-0.1.so.4 => /lib/libusb-0.1.so.4 (0xb76d1000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb76b8000)
libsgfpamx.so => /usr/local/lib/libsgfpamx.so (0xb769d000)
libsgfdu03.so => /usr/local/lib/libsgfdu03.so (0xb7632000)
libsgfplib.so => /usr/local/lib/libsgfplib.so (0xb7623000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7536000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7510000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb74f1000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb73aa000)
/lib/ld-linux.so.2 (0xb76ec000)
相同的exe(但针对x86编译)似乎并不需要。我完全迷路了....
ldd
是一个很好的告诉方式。请注意,不仅有一种ARM体系结构-pi是ARM11,又名。ARMv6,并且有一个不兼容的ARMv7(Cortex)。我不知道一种简单的方法来区分可执行文件。
ldd mylib.so
,看看会发生什么