C++调用C生成的动态库
2014-08-29 10:00
148 查看
看下面这个例子,其中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'
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'
相关文章推荐
- windows7下,Java中利用JNI调用c++生成的动态库的使用步骤
- c++动态库生成与调用
- Ubuntu下,Java中利用JNI调用codeblocks c++生成的动态库的使用步骤
- windows7下,Java中利用JNI调用c++生成的动态库的使用步骤
- Ubuntu下,Java中利用JNI调用codeblocks c++生成的动态库的使用步骤
- Ubuntu下,Java中利用JNI调用codeblocks c++生成的动态库的使用步骤
- Java调用C/C++生成的动态库函数
- C++(VS2012)DLL动态库的生成和调用
- C++调用C#写的动态库
- C调用C++动态库,静态库
- C#中 对标准C++动态库的调用
- VS2008环境下,C++生成Dll文件 C++调用Dll文件(非MFC)
- linux用c++调用动态库
- 学习笔记: linux下静态库与动态库的生成与调用
- Linux下动态库的生成及链接方法 ---傻瓜式调用啊
- c# 调用C++动态库 问题
- 利用C++调用C#生成的类库
- VC调用matlab生成的动态库
- VS2008 C++ 调用MATLAB 2009b 生成的DLL
- C# .net写的程序调用C++.net写的动态库,装载失败