Re: Was ist ein ABI?
Philipp Thomas <[email protected]>
| Newsgroups | gmane.linux.suse.programming |
|---|---|
| Message-ID | <[email protected]> |
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<char, std::char_traits<char> >::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<char, std::char_traits<char>, std::allocator<char> > 0009de40 w DF .text 0000002e GLIBCXX_3.4 std::codecvt_byname<wchar_t, char, __mbstate_t>::~codecvt_byname() 000eb658 w DO .bss 00000008 GLIBCXX_3.4 guard variable for std::money_get<char, std::istreambuf_iterator<char, std::char_traits<char> > >::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