ben bir PHP uzantısı SWIG kullanılarak yapılan yüklemeye çalışıyorum yapılan php uzantısı yükleme, ancak PHP başlatırken aşağıdaki hatayı alıyorum zaman:Tanımsız sembol yudum
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
Ben yüklemeye çalışıyorum uzantısıdır libtg.so
adlandırılır ve komutuyla derlendi: libtg_wrap.o
yudum tarafından oluşturulan sarıcı kodu için nesne dosyasıdır
g++ -shared libtg_wrap.o -o libtg.so
.
eksik sembol __gxx_personality_v0
aşağıdaki komutu de anlaşılacağı üzere, libstdc++.so
bulunur: böylece
$ 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)
ı don:
$ nm -D /usr/lib/libstdc++.so.6 | grep __gxx_personality_v0
00000000000b9990 T __gxx_personality_v0
libstdc++.so
aşağıdaki komutu de anlaşılacağı üzere, libtg.so
başvuruluyor Sembolü neden bulamadığını görüyorum. Bunu daha fazla hata ayıklama konusunda herhangi bir fikrin var mı?
İlginç bir şekilde, işe yaradı! Önceden 'g ++' yerine 'ld' yerine doğrudan bağlantı kuruyordum… Farkın ne olduğunu merak ediyorum. – HighCommander4
Aslında, bir fark olmamalı, g ++ kullanarak bağlantı kurabilirsiniz. .o dosyasını nasıl derlediğinizi veya swig komutunu veya diğer ayrıntıları nasıl çağırdığınızı göstermediğiniz için çok fazla şey söyleyemem .. ama işe yaradığıma sevindim! :) – marcelog
.o dosyası 'g ++ \' php-config5 --includes \ '-c -fPIC -std = C++ 0x libtg_wrap.cpp' ile derlenmiş ve swig komutu' swig -php - olarak çağrılmıştır. C++ libtg.i'. – HighCommander4