Jedną z wielu kluczowych różnic między kompilatorami C++ GCC & MSVC jest to, że w pierwszym wszystkie symbole z biblioteki współdzielonej są eksportowane domyślnie, podczas gdy MSVC nie eksportuje niczego.Jakie jest uzasadnienie projektu między GCC eksportujące wszystkie symbole domyślnie vs MSVC domyślnie nie eksportujących?
Niektóre implikacje są takie, że w programie MSVC należy wyeksportować wykluczające instancje klas szablonów.
Chociaż zaakceptowałem to jako fakt, zastanawiałem się, jakie są konsekwencje projektu, kompromisy, z perspektywy konstruktora kompilatora itp. Każdego podejścia?
Zachowanie GCC zostało prawie na pewno wybrane ze względu na zgodność z istniejącymi kompilatorami UNIX. Specyfikacja [ELF] (http://en.wikipedia.org/wiki/Executable_and_Linkable_Format) mówi, że symbole mają globalną widoczność domyślnie. Jest to tradycyjne zachowanie języka C: symbole są globalne, chyba że zostały zadeklarowane jako "statyczne". –