ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

CからC++の関数を呼び出す

BINARY HACKS p65

今度は逆。
書籍中では、いきなりboostとか出てきてしまってツライので、さっきの例の逆をやってみる。

taka@ubuntu:~$ more dbg2.cpp
//
// dbg2.cpp
//
#include 

extern "C" {
        void dbg(const char *s) {
                std::cout << "Log: " << s << std::endl;
        }
}
taka@ubuntu:~$ more sample2.c
//
// sample2.c
//
void dbg(const char *s);
int main() {
        dbg("bar");
        return 0;
}
taka@ubuntu:~$ g++ -c dbg2.cpp
taka@ubuntu:~$ ls dbg2.o
dbg2.o
taka@ubuntu:~$ cc -c sample2.c
taka@ubuntu:~$ ls sample2.o
sample2.o
taka@ubuntu:~$ g++ -o sample2 dbg2.o sample2.o
taka@ubuntu:~$ ./sample2
Log: bar
taka@ubuntu:~$

これまたあっさり動いた。
こっちもextern "C"が効いているようです。
ちなみに最後のオブジェクトファイルをリンクするところ

g++ -o sample2 dbg2.o sample2.o

をg++じゃなくて、gccでやると、大量にエラーが出ます。