Сам программистом не являюсь, но иногда приходится заниматься несвойственным делом как компиляция программ из исходников. Мне сложно представить, чем руководствуются разработчики программы, которые распространяют ее в виде исходных кодов и при этом не выкладывают откомпилированные версии. Наверное это очередной Holy опенсерсников. Ну да ладно, перейду к теме.
В ридми к программе написано что под 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
Вот с такой проблемой у меня уже не хватает мозгов справится. Мож кто че умное скажет куда тыкать или как игнорировать подобные ошибки…
Хочешь быть мудрым? Не желай всего, что видишь; не верь всему, что слышишь; не говори всего, что знаешь; не делай всего, что умеешь, а только то, что полезно.
Хочешь быть мудрым? Не желай всего, что видишь; не верь всему, что слышишь; не говори всего, что знаешь; не делай всего, что умеешь, а только то, что полезно.
1. Может нужно посмотреть где определена переменная _zend_do_inheritance и подключить заголовочник. 2. Если она определена как static, значит в этом файле (где ф-ия _restore_class_entry) вверху просто прописать ее прототип! 3. Может быть эта переменная определена как privat переменная для класса -> тогда сделать ее public.
Вот нигде не нашел такой переменной сделал поиск по всем файлам. А их там тьма. Я подозреваю что эта переменная определена в файле 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: