PHP FFI возможен на ARMv8?

#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 неправильно собирает общую библиотеку.