ITコンサルの日常

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

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

BINARY HACKS p62

とりあえずそのまま写経。

taka@ubuntu:~$ more dbg.c
//
// dbg.c
//
#include 
void dbg(const char *s) {
        printf("Log: %s\n", s);
}
taka@ubuntu:~$ more sample.cpp
//
// sample.cpp
//
extern "C" void dbg(const char *s);
int main() {
        dbg("foo");
        return 0;
}
taka@ubuntu:~$ gcc -c dbg.c
taka@ubuntu:~$ g++ -c sample.cpp
taka@ubuntu:~$ g++ -o sample dbg.o sample.o
taka@ubuntu:~$ ./sample
Log: foo
taka@ubuntu:~$

普通に動いた。
extern "C"ってのが、どうやらC++からCを呼び出す際のキーワードらしい。
ちなみにこいつをとっぱらってやってみると、

taka@ubuntu:~$ g++ -c sample.cpp
taka@ubuntu:~$ g++ -o sample dbg.o sample.o
sample.o: In function `main':sample.cpp:(.text+0x24): undefined reference to `dbg(char const*)'
collect2: ld returned 1 exit status
taka@ubuntu:~$

と、コンパイルは出来るがリンクで失敗する。
適当に探したら、
http://www.geocities.jp/ky_webid/cpp/language/038.html
にそれらしいこと載ってました。