Tôi có một thư viện được biên dịch (không có nguồn) cho trình điều khiển vân tay. Tôi chắc chắn đó là một trình biên dịch ARM vì lệnh này file mylib.so
nói:
Đối tượng chia sẻ LSB 32 bit ELF, ARM, phiên bản 1 (SYSV), được liên kết động, không bị tước
nhưng nếu tôi muốn sử dụng chúng trong chương trình C ++ thì tôi luôn có cùng một lỗi:
lỗi trong khi tải thư viện dùng chung: mylib.so: không thể mở tệp đối tượng dùng chung: Không có tệp hoặc thư mục như vậy
lỗi này giống như bạn thấy nó không rõ ràng lắm, tất nhiên tôi đã sử dụng lệnh xuất trên biến LD_LIBRARY_PATH với đường dẫn của mylib.so.
vậy, Làm thế nào để biết một thư viện ARM (.so) có tương thích với PI mâm xôi không?
-- Biên tập --
ldd libsgfdu03.so:
not a dynamic executable
ldd libsgfdu04.so:
not a dynamic executable
ldd libsgfpamx.so:
not a dynamic executable
Trong SDK, với .so
, tôi có một chương trình C ++ mẫu để quản lý trình điều khiển. Với hai lệnh để biên dịch trong một makefile:
g++ -I./ -I../include -c main.cpp
-> bao gồm một tệp có tên "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
Tất cả các đường dẫn đều tốt và không có lỗi nào được báo cáo tại thời điểm biên dịch, nhưng sau khi ldd
thực thi cuối cùng sẽ ldd sgfplibtest_fdu03
nói:
/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)
- Chỉnh sửa cùng trình điều khiển với 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)
Cùng một exe (nhưng được biên dịch cho x86) dường như không yêu cầu gì thêm. Tôi hoàn toàn bị mất ....
ldd
là một cách tốt để nói Lưu ý rằng không chỉ có một kiến trúc ARM - pi là ARM11, hay còn gọi là. ARMv6 và có ARMv7 (Cortex) không tương thích. Tôi không biết một cách dễ dàng để phân biệt các thực thi mặc dù.
ldd mylib.so
và xem những gì đi ra