Подключение внешней библиотеки в расширении PECL

Alia

Новичок
Пытаемся сделать обертку для сишной библиотеки в виде PECL расширения. Компиляция проходит без ошибок, а при тесте
if (!dl('~/www/BKI/ext3/modules/signal.so')) {
exit;
}
выдается ошибка:
"Unable to load dynamic library '/usr/lib64/php/modules/signal.so' - /usr/lib64/php/modules/signal.so: cannot open shared object file: No such file or directory in /home/bankdev/www/BKI/ext3/modules/test_so4.php on line 3".

прилагаю confi.m4


Заранее спасибо за помощь!
 

Вложения

NT Man

Новичок
Поправлю коллегу ошибка немного другая у нас:

PHP Warning: dl(): Unable to load dynamic library '/usr/lib64/php/modules/signal.so' - /usr/lib64/php/modules/signal.so: undefined symbol: AddSigner in /home/bankdev/www/BKI/test_so4.php on line 3
 

Alia

Новичок
Обновление по проблеме. Конфиг заменили с учетом загрузки библиотеки, теперь ошибка возникает на момент компиляции не находит LIBSYMBOL: "checking for AddSinger in -llibmesprox... no"
Я же правильно поняла, что это любой символ, который используется в so-файле. Прилагаю новый конфиг.
 

Вложения

tony2001

TeaM PHPClub
LIBNAME=libmesprox

должно быть LIBNAME=mesprox
префикс "lib" не учитывается.
 

tony2001

TeaM PHPClub
в config.log, кстати, все детали, configure же про это явно говорит.
 

NT Man

Новичок
собственно говоря вот почему ругается:

PHP:
configure:3608: cc -o conftest -g -O2   conftest.c -lmesprox   >&5                                                                                            
/tmp/ccoBxrjH.o: In function `main':                                                                                                                          
/home/bankdev/www/BKI/ext3/conftest.c:20: undefined reference to `AddSinger'                                                                                  
collect2: ld returned 1 exit status                                                                                                                           
configure:3614: $? = 1                                                                                                                                        
configure: failed program was:                                                                                                                                
| /* confdefs.h.  */                                                                                                                                          
|                                                                                                                                                             
| #define PACKAGE_NAME ""                                                                                                                                     
| #define PACKAGE_TARNAME ""                                                                                                                                  
| #define PACKAGE_VERSION ""                                                                                                                                  
| #define PACKAGE_STRING ""                                                                                                                                   
| #define PACKAGE_BUGREPORT ""                                                                                                                                
| /* end confdefs.h.  */                                                                                                                                      
|                                                                                                                                                             
| /* Override any gcc2 internal prototype to avoid an error.  */                                                                                              
| #ifdef __cplusplus                                                                                                                                          
| extern "C"                                                                                                                                                  
| #endif                                                                                                                                                      
| /* We use char because int might match the return type of a gcc2                                                                                            
|    builtin and then its argument prototype would still apply.  */                                                                                           
| char AddSinger ();                                                                                                                                          
| int                                                                                                                                                         
| main ()                                                                                                                                                     
| {                                                                                                                                                           
| AddSinger ();                                                                                                                                               
|   ;                                                                                                                                                         
|   return 0;                                                                                                                                                 
| }                                                                                                                                                           
configure:3640: result: no                                                                                                                                    
configure:3752: error: wrong signal version {1.4.+ is required} or lib not found
 

tony2001

TeaM PHPClub
Ну, видимо, она лежит вне директорий, о которых знает ldconfig.
Это настраивается в /etc/ld.so.conf & /etc/ld.so.conf.d/*
 

NT Man

Новичок
Я что-то совсем теперь ничего не понимаю

# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf

смотрим
# ls -la /etc/ld.so.conf.d
total 32
drwxr-xr-x 2 root root 4096 Авг 27 19:48 .
drwxrwxr-x 102 root root 12288 Дек 5 15:27 ..
-rw-r--r-- 1 root root 37 Сен 19 2011 oracle.conf

далее
# cat /etc/ld.so.conf.d/oracle.conf
/usr/lib64/oracle/11.2/client64/lib/

хотя когда делаю
# ldconfig -p | more
803 libs found in cache `/etc/ld.so.cache'
libz.so.1 (libc6,x86-64) => /lib64/libz.so.1
libz.so.1 (libc6,x86-64) => /usr/lib64/libz.so.1
libz.so.1 (libc6) => /lib/libz.so.1
libz.so.1 (libc6) => /usr/lib/libz.so.1

и т д т.е. ldconfig откудато знает о каталогах /lib64 и /usr/lib64 на этой машине

К слову сам libmesprox.so.0 лежит в /lib64 и на него созданна символическая ссылка /urs/lib64/libmesprox.so

Ну и к слову на этой машинк собирался PHP из сорцов + расширения xcache, pecl_dbase, pecl_imagick, pecl_rar.
 

NT Man

Новичок
Всем спасибо!

Дело было в опечатке вместе AddSigner написали AddSinger
 
Сверху