Compare quando si linka un programma compilato con il nuovo standard C++11 ABI di GCC con una libreria compilata con la vecchia ABI pre-C++11 (o viceversa), a causa di implementazioni interne incompatibili di std::string e std::list.
CXX11_ABI_MISMATCH
→
L'omologo Visual C++ della violazione della ODR (One Definition Rule): la medesima funzione o variabile globale esportata possiede definizioni multiple non inline in due o più file .obj linkati insieme.
LNK2005_ALREADY_DEFINED
→
Scrivere il corpo di una funzione libera direttamente all'interno di un file header .h senza la parola chiave 'inline' fa sì che ogni file .cpp che include l'header generi una definizione forte del simbolo violando la One Definition Rule (ODR).
MULTIPLE_DEF_MISSING_INLINE
→
Il linker non trova i metadati RTTI (Run-Time Type Information) generati per il dynamic_cast o typeid, solitamente causato dallo stesso problema della vtable o da file oggetto compilati con flag disallineati (-fno-rtti).
UNDEF_REF_TYPEINFO
→
Tipico del compilatore GCC/Clang: compare quando una classe dichiara metodi virtuali non puri ma dimentica di fornire l'implementazione del primo metodo virtuale non-inline (detto 'key function') in alcun file .cpp.
UNDEF_REF_VTABLE
→
Il compilatore C++ applica il name mangling a tutte le funzioni per supportare l'overload; quando si includono funzioni scritte in linguaggio C occorre racchiuderle in 'extern "C" { ... }' per mantenere la convenzione di nomi C non decorata.
EXTERN_C_MISSING
→
L'inclusione delle librerie parallele Intel Threading Building Blocks (TBB) o algoritmi paralleli C++17 ('std::execution::par') su Linux richiede di specificare il flag '-ltbb' in fase di link.
UNDEF_REF_TBB
→
Dichiarare una variabile statica all'interno di una classe ('static int count;') ne riserva il nome ma non la memoria; se non viene definita all'esterno ('int MyClass::count = 0;') o dichiarata 'inline static' (da C++17), il linker non troverà l'allocazione.
STATIC_MEMBER_UNDEF_REF
→