メルセンヌ・ツイスタなど、C言語で記述されたライブラリをC++から利用するためには extern "C" を利用します。その際、組み込みマクロ __cplusplus を利用するとC言語からもC++からも利用できるヘッダファイルを作成できます。
sub.h
#ifndef SUB_H_
#define SUB_H_
#ifdef __cplusplus
extern "C" {
#endif
void my_func_c();
#ifdef __cplusplus
}
#endif
#endif // #ifndef SUB_H_
sub.c
#include "sub.h"
#include <stdio.h>
void my_func_c() {
printf("my_func_c\n");
}
main.cpp
// extern "C" {
#include "sub.h"
// } // としてもよい (ヘッダファイルがC++対応していない場合)
#include <iostream>
using namespace std;
int main() {
my_func_c(); //=> my_func_c
return 0;
}
Makefile (文法については、こちらを参照してみてください)
CFLAGS = -g -Wall
ALL: main.o sub.o
g++ $(CFLAGS) -o main main.o sub.o
main.o: main.cpp sub.h
g++ $(CFLAGS) -o main.o -c main.cpp
sub.o: sub.c sub.h
gcc $(CFLAGS) -o sub.o -c sub.c