C++からCの関数を呼び出す
BINARY HACKS p62
とりあえずそのまま写経。
taka@ubuntu:~$ more dbg.c // // dbg.c // #includevoid 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
にそれらしいこと載ってました。