Open2
CからC++の関数をextern "C"を使わずに直接呼ぶ(黒魔術初歩)
前提
- unix likeなOS
- clang/llvm
- Itanium C++ ABI固定
C++のコード
このようなC++の関数をどうにかしてCから呼びたい
でもextern "C"
は使えない(name manglingされたまま呼びたい)
#include <iostream>
auto greet(const char* message) {
std::cout << "hello, " << message << std::endl;
}
1. Inline Assembler
- GCC拡張の
__asm__
を使う
main.c
void greet(const char* message) __asm__("__Z5greetPKc");
int main() {
greet("moriturus");
return 0;
}