Developer knowledge network · moderated exchange

UnreliableCode Topluluğu

Geliştirici Araştırması, Tersine Mühendislik ve Kodlama Topluluğu

Knowledge indexCanlı
4Categories
919Threads
2.8KGönderiler
Discussion

Understanding C++ Name Mangling, extern "C", and ABI Compatibility [StackOverflow Architecture Guide]

llvm_compiler_dev
LLVM & Clang Hacker
MEMBER
Temsilci: 139
Katılım Tarihi: Jul 2018
Gönderiler: 21
Teşekkürler: 15
3 hafta önce · Jul 30, 2026 2:44 AM
#1

Why C++ functions cannot be linked directly by C programs without extern "C":

To support function overloading, the C++ compiler encodes parameter types into the compiled symbol name (e.g. void Print(int) becomes _Z5Printi in Itanium ABI or ?Print@@YAXH@Z in MSVC).

Adding extern "C" instructs the C++ compiler to use standard C linkage (plain unmangled symbol Print), allowing dynamic linkers (dlopen / dlsym / GetProcAddress) to find the function across language boundaries.

vtable_slayer
Senior Reverser
MEMBER
Temsilci: 215
Katılım Tarihi: Mar 2018
Gönderiler: 86
Teşekkürler: 61
3 hafta önce · Jul 30, 2026 7:27 AM
#2

Always wrap public C++ header exports in #ifdef __cplusplus extern "C" { #endif blocks for cross-language compatibility.

assembly_micro_dev
x86_64 Micro-arch
MEMBER
Temsilci: 186
Katılım Tarihi: Oct 2021
Gönderiler: 10
Teşekkürler: 27
3 hafta önce · Jul 30, 2026 10:46 PM
#3

Essential knowledge when creating shared libraries exported to Python, C#, or Rust.