Мы связали код PHP с кодом C ++ с помощью кода расширения PHP (написанного только на C ++) ... которые все отлично работали в 32-битной ОС.

Теперь мы изменили версию многих ПО, так как версия ОС была изменена на 64-битную. Мы скомпилировали код C ++, который ранее работал нормально с использованием 64-битного gcc, в 32-битный файл «.so», он показал много ошибок, мы очистили все их и, наконец, успешно скомпилировали. Но при связывании с PHP он показывает:

undefined symbol: _ZTV5Temps" error
0
viswa 25 Мар 2013 в 13:01

1 ответ

Лучший ответ

Используйте c++filt, чтобы распутать имя:

$ c++filt -n _ZTV5Temps
vtable for Temps

Я предполагаю (учитывая отсутствие контекста), что у вас есть ссылка на Temps (класс) в модуле, который не был перекомпилирован / перекомпилирован.

0
mr.spuratic 25 Мар 2013 в 16:03
Привет, спасибо ... ваш ответ помог мне решить эту ошибку, но теперь я получаю еще одну ошибку, как показано ниже: "undefined symbol: _ZTIN3ocl11CRExceptionE" Я попытался использовать ту же команду o / p, как показано ниже: "# c ++ filter -n _ZTIN3ocl11CRExceptionE typeinfo для ocl :: CRException ", но я не понимаю, пожалуйста, помогите мне
 – 
viswa
26 Мар 2013 в 13:14
OCL - это библиотека классов Oracle C ++, вам необходимо перестроить ее, если вы используете библиотеки, скомпилированные в старой настройке (даже если она все еще была 32-разрядной, двоичные файлы и библиотеки C ++ должны использовать один и тот же компилятор, чтобы избежать головной боли ABI).
 – 
mr.spuratic
26 Мар 2013 в 16:48
@ mr.spuratic Укажите, пожалуйста, какие библиотеки нужно перекомпилировать ??? Я проверил библиотеки OCL, там есть только файлы .h, и есть класс "CRException", который я включил для компиляции моего кода в Makfile. Теперь я немного смущен подходом к этой проблеме, пожалуйста, помогите мне.
 – 
viswa
26 Мар 2013 в 18:43