Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Компилирование и свободный софт, :)
 
Сам программистом не являюсь, но иногда приходится заниматься несвойственным делом как компиляция программ из исходников. Мне сложно представить, чем руководствуются разработчики программы, которые распространяют ее в виде исходных кодов и при этом не выкладывают откомпилированные версии. Наверное это очередной Holy опенсерсников. Ну да ладно, перейду к теме.

Потребовалось мне откомпилировать последнюю бету версию Eaccelerator:
https://sourceforge.net/project/showfiles.php?group_id=122249&package_id=133446&release_id=408973
Так как в ней устранена ошибка, с которой я постоянно сталкивался.

В ридми к программе написано что под Windows нужен Visual Studio.
Хорошо что сейчас есть бесплатная версия Visual Studio, и не пришлось ее покупать.
Скачав 150 Мб я обнаружил что одной Visual Studio не достаточно, нужно еще чудо под названием Microsoft Platform SDK for Windows Server размером 350 Мб. Ну да ладно, скачал и ее не проблема, благо бесплатно. Далее делаю все по инструкции – скачиваю исходники php, подключаю проект, компилирую. Часть заголовков почему то не цепляется автоматом (хотя в ридми написано что должны), это мелочи подцепил ручками. К удивлению все откомпилировалось с пол сотней варнингов (ну что варнинги это нормально для опенсерса мне уже сказали :offtop:) но на этапе линковки выдается следующая ошибка:

Код
   Creating library .\Release/eAccelerator.lib and object .\Release/eAccelerator.exp
ea_restore.obj : error LNK2019: unresolved external symbol _zend_do_inheritance referenced in function _restore_class_entry
.\Release/eAccelerator.dll : fatal error LNK1120: 1 unresolved externals


Вот с такой проблемой у меня уже не хватает мозгов справится. Мож кто че умное скажет куда тыкать или как игнорировать подобные ошибки…
Хочешь быть мудрым? Не желай всего, что видишь; не верь всему, что слышишь; не говори всего, что знаешь; не делай всего, что умеешь, а только то, что полезно.
 
php версии 4.4.2.
Хочешь быть мудрым? Не желай всего, что видишь; не верь всему, что слышишь; не говори всего, что знаешь; не делай всего, что умеешь, а только то, что полезно.
 
1. Может нужно посмотреть где определена переменная _zend_do_inheritance и подключить заголовочник.
2. Если она определена как static, значит в этом файле (где ф-ия _restore_class_entry) вверху просто прописать ее прототип!
3. Может быть эта переменная определена как privat переменная для класса -> тогда сделать ее public.

А вообще лучше код помотреть  ;)
 
Цитата
grinders пишет:
_zend_do_inheritance
Вот нигде не нашел такой переменной :) сделал поиск по всем файлам.  А их там тьма. Я подозреваю что эта переменная определена в файле php4ts.lib (а он только в таком виде поставляется).
Хочешь быть мудрым? Не желай всего, что видишь; не верь всему, что слышишь; не говори всего, что знаешь; не делай всего, что умеешь, а только то, что полезно.
 
Если проблема в неподключенной библиотеке, то в можно воткнуть в подходящий хэдер
#pragma comment(lib,"php4ts.lib")
предварительно разместив его в такой директории, где компилятор его сможет найти (там в опциях проекта есть списки директорий, где он будет искать либ-файлы).
 
Цитата
dE fENDER пишет:
Если проблема в неподключенной библиотеке, то в можно воткнуть в подходящий хэдер
Библиотека как раз подключена. Проблема в кривой программе, версия 0.9.4 компилировалась нормально.
Хочешь быть мудрым? Не желай всего, что видишь; не верь всему, что слышишь; не говори всего, что знаешь; не делай всего, что умеешь, а только то, что полезно.
 
Цитата
Александр Антипов пишет:
К удивлению все откомпилировалось с пол сотней варнингов (ну что варнинги это нормально для опенсерса мне уже сказали )
В опенсорсе, под Linux-ом, как раз проблем нет. emerge dev-php5/eaccelerator и само все скачалось, собралось(без единого варнинга) и корректно установилось. Кто ж виноват что в очередной версии MSVS что-то накурочили.
Хотя возможно, что автор вообще не проверял сборку новой версии своей софтины под win32 и пропустил какой косяк...

Цитата
Александр Антипов пишет:
Creating library .Release/eAccelerator.lib and object .Release/eAccelerator.exp
ea_restore.obj : error LNK2019: unresolved external symbol _zend_do_inheritance referenced in function _restore_class_entry
.Release/eAccelerator.dll : fatal error LNK1120: 1 unresolved externals
Это ошибка из-за ссылки на неизвестный символ zend_do_inheritance.
Короче, zend_do_inheritance _не_  экспортируется в либе php4ts.lib.
zend_do_inheritance экспртирована в PHP5, видимо код был заточен под PHP5. Первый вариант - ставить PHP5 и собирать под него. Второй вариант - править код. Предыдущая версия(0.9.4) собирается потому, что там не используется zend_do_inheritance(), поэтому пофиксить можно, выкинув все вызовы ссылки zend_do_inheritance в ea_restore.c:

Код
#ifdef ZEND_ENGINE_2
        restore_class_methods(to TSRMLS_CC);
#endif
        if (to->parent)
                zend_do_inheritance(to, to->parent TSRMLS_CC);
        EAG(class_entry) = old;


поменять на:

Код
#ifdef ZEND_ENGINE_2
        restore_class_methods(to TSRMLS_CC);

        if (to->parent)
                zend_do_inheritance(to, to->parent TSRMLS_CC);
#endif
        EAG(class_entry) = old;


Или вообще выкинуть zend_do_inheritance, что по-видимому допустимо для PHP4(т.к. здесь to->parent==NULL), приведя код к коду версии 0.9.4:

Код
#ifdef ZEND_ENGINE_2
        restore_class_methods(to TSRMLS_CC);
#endif
        EAG(class_entry) = old;
Страницы: 1
Читают тему