PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
OrmaJever
Отправлено: 20 Марта, 2013 - 16:22:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 7551
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Выхода другого всеравно нет, поэтому решил спросить тут. Кто нибудь писал расширения для php? Всречали какие либо ошибки?
Месяц назад начал писать расширение, и когда код был почти дописан, осталось только пару мелочей, я вдруг что-то менял/чистил в редакторе и больше оно не компилируется не находя обьявлений неких переменых
CODE (htmlphp):
скопировать код в буфер обмена
  1. Release\main.o: In function `gc_remove_from_buffer':
  2. php-5.4.11/Zend/zend_gc.h:191: undefined reference to `_imp__gc_globals_id'
  3. php-5.4.11/Zend/zend_gc.h:192: undefined reference to `_imp__gc_globals_id'
  4. Release\main.o: In function `safe_free_zval_ptr_rel':
  5. php-5.4.11/Zend/zend_execute.h:66: undefined reference to `_imp__executor_globals_id'
  6. Release\main.o: In function `i_zval_ptr_dtor':
  7. php-5.4.11/Zend/zend_execute.h:85: undefined reference to `_imp__executor_globals_id'
  8. Release\main.o: In function `zend_vm_stack_init':
  9. php-5.4.11/Zend/zend_execute.h:194: undefined reference to `_imp__executor_globals_id'
  10. Release\main.o: In function `zend_vm_stack_destroy':
  11. php-5.4.11/Zend/zend_execute.h:199: undefined reference to `_imp__executor_globals_id'
  12. Release\main.o: In function `zend_vm_stack_extend':
  13. php-5.4.11/Zend/zend_execute.h:211: undefined reference to `_imp__executor_globals_id'
  14. Release\main.o:php-5.4.11/Zend/zend_execute.h:212: more undefined references to `_imp__executor_globals_id' follow
  15. Release\main.o: In function `php_set_error_handling':
  16. php-5.4.11/main/php.h:296: undefined reference to `_imp___Z27zend_replace_error_handling21zend_error_handling_tP17_zend_class_entryP19zend_error_handlingPPPv'

Для компиляции нужна лиш одна либа php5ts.lib, и она конешно же подключена но толку мало. Впринципе ошибка даже не из-за расширения т.к если убрать весь код с него то она всеравно будет, она из-за компиляции самого php...
Компилировал по этой схеме http://habrahabr[dot]ru/post/125597/
Ах да win7 x64, компилирую в mingw. Проэкт лежит уже месяц и совесть некак не позволяет его забросить, а все попытки исправить неудачны, поисковики на эти ошибки вобще молчат! Думал написать на stackoverflow, но с англиским у меня туго.
Этот пост это просто крик души.

(Отредактировано автором: 20 Марта, 2013 - 16:23:43)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Мелкий Супермодератор
Отправлено: 20 Марта, 2013 - 18:14:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 11671
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 581 раз(а)




Я бы посоветовал повторить в виртуалке. Есть ощущение, что случайно изменили исходник PHP.


-----
PostgreSQL DBA
 
 Top
OrmaJever
Отправлено: 20 Марта, 2013 - 19:46:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 7551
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Хмм.. а ведь в этих словах есть здравый смысл! Да я закоментировал 2 обьявления где то в исходниках, но только потому что ругалось на повторное обьясвление, но вроде после того компилировалось... Сейчас попробую скачать чистые исходники.
(Добавление)
хмм... нет, конментировал строку в win95nt.h
CODE (htmlphp):
скопировать код в буфер обмена
  1. #if !NSAPI
  2. //typedef long pid_t;
  3. #endif

т.к. она уже определена в types.h
CODE (htmlphp):
скопировать код в буфер обмена
  1. #ifndef _NO_OLDNAMES
  2. typedef _pid_t  pid_t;
  3. #endif

там видимо проблемы с константами, поэтому обе остались.
Скачал чистые исходники 5.4.13, и всеравно та же ошибка Огорчение


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
OrmaJever
Отправлено: 20 Марта, 2013 - 23:42:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 7551
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Я уже сломал всю свою здравую логику.
переменую которую не может найти компилятор используется в zend_gc.h
CODE (htmlphp):
скопировать код в буфер обмена
  1. #ifdef ZTS
  2. BEGIN_EXTERN_C()
  3. ZEND_API extern int gc_globals_id;
  4. END_EXTERN_C()
  5. #define GC_G(v) TSRMG(gc_globals_id, zend_gc_globals *, v)
  6. #else
  7. #define GC_G(v) (gc_globals.v)
  8. extern ZEND_API zend_gc_globals gc_globals;
  9. #endif

написана он экстерном потому что обьявляется в zend_gc.c
CODE (htmlphp):
скопировать код в буфер обмена
  1. #ifdef ZTS
  2. ZEND_API int gc_globals_id;
  3. #else
  4. ZEND_API zend_gc_globals gc_globals;
  5. #endif

Соответственно оно должна быть скомпилирована и находится в либе php5ts.lib, в проэкте константа потокобезопасности (ZTS) установлена, потокобезопасная либа так же подключена, но блин не находит в ней грёбаную "gc_globals". Ну вот как так? Это вобще возможно?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
esterio
Отправлено: 21 Марта, 2013 - 07:59:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 5021
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)





extension не писал, но интерс что Вы там такое пишете возник!!
 
 Top
OrmaJever
Отправлено: 21 Марта, 2013 - 11:17:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 7551
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Если допишу то выложу вместе с исходниками, а если нет то и смысла говорить нет Ниндзя


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
OrmaJever
Отправлено: 21 Марта, 2013 - 17:26:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 7551
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Ура ура, я переустановил редактор вместе с компилятором, сбросил всё что возможно было по дефолту и скомпилировалось. Сегодня вспомню что я там писал и скоро выложу.
Кстате такой вопрос, а если на хостинге доступен php.ini возможно ли подключить свой php extension?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
EuGen Администратор
Отправлено: 21 Марта, 2013 - 17:48:27
Post Id


Профессионал


Покинул форум
Сообщений всего: 9098
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Это можно попытаться сделать даже если php.ini недоступен (не удастся, правда, в не потоко-безопасном режиме такое проделать, да и в CGI тем более, но все же): dl
А если доступен php.ini - так в чем вопрос? Указать правильный путь к динамически загружаемым расширениям и добавить своё в секцию extensions


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
OrmaJever
Отправлено: 21 Марта, 2013 - 17:52:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 7551
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




EuGen пишет:
А если доступен php.ini - так в чем вопрос? Указать правильный путь к динамически загружаемым расширениям и добавить своё в секцию extensions

Слишком просто показалось, решил что так не бывает ;)
А функция dl вобще обрадовала! Спасибо EuGen
(Добавление)
EuGen пишет:
не удастся, правда, в не потоко-безопасном режиме такое проделать, да и в CGI тем более, но все же

Ну если подумать по логике то на всех хостингах php стоит как мод апача, и я думаю у всех потокобезопастная версия. А в чём кстате преймущество non thread safe? Зачем его сделали?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
OrmaJever
Отправлено: 25 Марта, 2013 - 21:35:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 7551
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Блин ну линукс конешно меня убитвает. Предложение из статьи http://habrahabr[dot]ru/post/125597/ "В *nix'ах все оказалось как всегда проще." я не забуду никогда!
собрал Makefile как указано в статье, он вызвает libtool
CODE (htmlphp):
скопировать код в буфер обмена
  1. $(LIBTOOL) --mode=compile $(CXX)  -I. -I/media/flash/ext $(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS)  -c /media/flash/ext/main.cpp -o main.lo

А libtool в ответ пишет "неверный парметр -I.", ладно если бы я руками makefile писал, но ведь я его собрал командой ./configure ...


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Программирование на C++ »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB