Open2

CからC++の関数をextern "C"を使わずに直接呼ぶ(黒魔術初歩)

Henrique Sasaki YuyaHenrique Sasaki Yuya

前提

  • 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;
}
Henrique Sasaki YuyaHenrique Sasaki Yuya

1. Inline Assembler

  • GCC拡張の__asm__を使う
main.c
void greet(const char* message) __asm__("__Z5greetPKc");

int main() {
    greet("moriturus");
    return 0;
}