How to make D resolve C++ symbols by mangling symbols with the Itanium ABI on Windows
thumbgun
thumbgun07 at gmail.com
Mon Feb 26 13:36:42 UTC 2024
I'm currently trying to call some C++ functions that were
compiled by g++ (mingw). However g++ uses the Itanium ABI name
mangling rules. dmd on Windows tries to link functions based on
the MSVC name mangling rules. For example:
```
// add.cpp
int add(int lhs, int rhs)
{
return lhs + rhs;
}
// main.d
import std.stdio;
extern(C++) int add(int lhs, int rhs);
void main()
{
auto x = add(5, 6);
writeln(x);
}
// Command line
g++ add.cpp -c -o add.obj
dmd main.d add.obj
// Output
main.obj : error LNK2019: unresolved external symbol "int __cdecl
add(int,int)"
(?add@@YAHHH at Z) referenced in function _Dmain
```
The prefix for MSVC symbols is '?' while the Itanium ABI's prefix
is '_Z'. Is there any way I can make dmd link to symbols mangled
according to the Itanium ABI's rules on Windows?
More information about the Digitalmars-d
mailing list