Am Wed, 18 Feb 2009 11:23:47 +0100 schriebst Du:
Das die Änderung eines Types von int zu long in der Signatur auch die ABI
ändert ist neu:-)
Nicht zwansläufig :) Bei C++ fliesst ja der Datentyp direkt in die Namensdekoration
ein. Mach mal ein 'objdump --demangle -T /usr/lib64/libstdc++.so.6', dann
bekommst Du (Ausschnitt):
00067a70 w DF .text 00000015 GLIBCXX_3.4 std::basic_ios::operator void*() const
00054480 g DF .text 00000016 GLIBCXX_3.4.6 std::locale::facet::_S_get_c_name()
000c48e0 w DO .rodata 00000031 GLIBCXX_3.4 typeinfo name for std::basic_stringstream
0009de40 w DF .text 0000002e GLIBCXX_3.4 std::codecvt_byname::~codecvt_byname()
000eb658 w DO .bss 00000008 GLIBCXX_3.4 guard variable for std::money_get >::id
000b9320 g DF .text 00000033 GLIBCXX_3.4.10 __gnu_parallel::_Settings::set(__gnu_parallel::_Settings&)
000970f0 w DF .text 00000097 GLIBCXX_3.4 std::string::compare(unsigned int, unsigned int, char const*, unsigned int) const
Wärend das Ganze undekodiert (also ohne --demangle) so aussieht:
00067a70 w DF .text 00000015 GLIBCXX_3.4 _ZNKSt9basic_iosIcSt11char_traitsIcEEcvPvEv
00054480 g DF .text 00000016 GLIBCXX_3.4.6 _ZNSt6locale5facet13_S_get_c_nameEv
000c48e0 w DO .rodata 00000031 GLIBCXX_3.4 _ZTSSt18basic_stringstreamIcSt11char_traitsIcESaIcEE
0009de40 w DF .text 0000002e GLIBCXX_3.4 _ZNSt14codecvt_bynameIwc11__mbstate_tED1Ev
000eb658 w DO .bss 00000008 GLIBCXX_3.4 _ZGVNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE
000b9320 g DF .text 00000033 GLIBCXX_3.4.10 _ZN14__gnu_parallel9_Settings3setERS0_
000970f0 w DF .text 00000097 GLIBCXX_3.4 _ZNKSs7compareEjjPKcj
Auf Architekturen wie x86-64 , wo int 32 Bit long aber 64 Bit lang ist ergibt sich auch
für C Code eine ABI-Änderung.
Auch wenn ich immernoch der Meinung bin, das eine Änderung der Signatur eine
Änderung der API ist und daher so oder so neu kompiliert werden sollte...
Wie soll das aber die Applikation merken? Wenn ich eine kompilierte Applikation habe
und nun eine neue Version der Bibliothek einspiele erwarte ich, dass diese Applikation
nach wie vor vernünftig funktioniert. Das aber ist (unter anderem) nur garantiert, wenn
das ABI nicht verändert wurde.
Philipp
--
To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-programming-de+help@opensuse.org