#php #arm #ffi #armv8 #php-ffi
Вопрос:
Я могу загрузить свою библиотеку через FFI на x86_64, но не на AArch64.
FFI::cdef(
/* ... */,
$root . './build/libuplink.so'
);
PHP Fatal error: Uncaught FFIException: Failed loading '/home/linaro/uplink-php/build/libuplink.so' in /home/linaro/uplink-php/src/Uplink.php:37
Stack trace:
#0 /home/linaro/uplink-php/src/Uplink.php(37): FFI::cdef()
#1 /home/linaro/uplink-php/index.php(28): StorjUplinkUplink::create()
#2 {main}
thrown in /home/linaro/uplink-php/src/Uplink.php on line 37
Это тип библиотеки (скомпилированной для ARMv8 с Cgo):
$ file build/libuplink.so
build/libuplink.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=50fa8518936b2e258f62d09d3ae9bed0c4686b9d, stripped
Информация о системе:
$ uname -a
Linux linaro-alip 5.9.0-qcomlt-arm64 #138 SMP PREEMPT Sat Nov 21 00:47:13 UTC 2020 aarch64 GNU/Linux
$ php -v
PHP 7.4.16 (...)
Кто-нибудь когда-нибудь пробовал это и у него это работало?
Ответ №1:
Я попробовал на примере игрушки, и это работает.
Вероятно, проблема не в PHP, а в том, что cgo неправильно собирает общую библиотеку.