C++調用C生成的動態庫

看下面這個例子,其中add函數是用c編寫的代碼,而主函數是用c++編寫的代碼,將c代碼編譯成動態庫,然後用c++調用。

add.h 

#ifndef  ADD_FILE_HEADER_INC
#define  ADD_FILE_HEADER_INC

#include <stdio.h>
#include <malloc.h>

extern double
add (double a, double b);
#endif 

add.c

#include "add.h"

double 
add (double a, double b){
    return a+b;
}

 
main.cxx

extern "C"
{
#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 

main:main.o add.so
        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'

發佈了87 篇原創文章 · 獲贊 28 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章