看下面這個例子,其中add函數是用c編寫的代碼,而主函數是用c++編寫的代碼,將c代碼編譯成動態庫,然後用c++調用。
add.h
#define ADD_FILE_HEADER_INC
#include <stdio.h>
#include <malloc.h>
extern double
add (double a, double b);
#endif
add.c
double
add (double a, double b){
return a+b;
}
main.cxx
{
#include "add.h"
}
int
main()
{
double a=5.2, b=65.47;
double c=add(a,b);
printf("%lf\n", c);
return 0;
}
用於編譯的makefile如下:
makefile
g++ -o main main.o ./add.so -g
add.so:add.c
gcc -fpic -shared -g -o add.so add.c -I ./
main.o:main.cxx
gcc -c main.cxx -I ./
clean:
rm *.so *.o main
需要注意的是,在生成可執行文件時,用的編譯命令爲g++, 而不是gcc,如果用gcc編譯將出現如下錯誤:
umain.o:(.eh_frame+0x11): ndefined reference to `__gxx_personality_v0'