Estoy tratando de cargar una extensión de PHP realizadas con SWIG, pero estoy consiguiendo el error siguiente cuando se inicia PHP:símbolo Indefinido al cargar la extensión php hecho con TRAGO
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/libtg.so' - /usr/lib/php5/20090626/libtg.so: undefined symbol: __gxx_personality_v0 in Unknown on line 0
La extensión que estoy tratando de cargar se encuentren libtg.so
llamado y fue compilado con el comando:
g++ -shared libtg_wrap.o -o libtg.so
donde libtg_wrap.o
es el archivo de objeto para el código de contenedor generado por el TRAGO.
El símbolo que falta __gxx_personality_v0
se encuentra en libstdc++.so
, como se desprende de la siguiente orden:
$ nm -D /usr/lib/libstdc++.so.6 | grep __gxx_personality_v0
00000000000b9990 T __gxx_personality_v0
libstdc++.so
se hace referencia en libtg.so
, como se desprende de la siguiente comando:
$ ldd libtg.so
linux-vdso.so.1 => (0x00007fff5f932000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f3fc937c000)
libm.so.6 => /lib/libm.so.6 (0x00007f3fc90f9000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f3fc8ee2000)
libc.so.6 => /lib/libc.so.6 (0x00007f3fc8b5f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3fc98fc000)
así que don No veo por qué no puede encontrar el símbolo. ¿Alguna idea sobre cómo puedo depurar esto aún más?
¡Curiosamente, funcionó! Previamente estaba usando 'g ++' para enlazar en lugar de 'ld' directamente ... Me pregunto cuál es la diferencia. – HighCommander4
En realidad, no debería haber una diferencia, puede vincular usando g ++. Como no muestra cómo compiló el archivo .o o cómo invocó el comando swig o cualquier otro detalle, no puedo decir mucho más ... ¡pero me alegro de que haya funcionado! :) – marcelog
El archivo .o se compiló con 'g ++ \' php-config5 --includes \ '-c -fPIC -std = C++ 0x libtg_wrap.cpp', y el comando swig se invocó como' swig -php - C++ libtg.i'. – HighCommander4