c++调用c函数是比较简单的,但c调用c++函数则要麻烦一些,除了用动态链接库,我暂时也没有找到其它方法.
// vector.cpp:
#include <vector>
#include <string>
using namespace std;
extern "C"
{
void vector_add_string(char* str);
void vector_list_strings(char* buff);
vector<string> _stringList;
void vector_add_string(char* str)
{
_stringList.push_back( string(str) );
}
void vector_list_strings(char* buff)
{
int len=0;
for( vector<string>::iterator it=_stringList.begin();it!=_stringList.end();++it)
{
strcpy( buff+len,(*it).c_str());
len+=it->length();
}
}
}
编译程动态链接库:
g++ -shared -o vector.so vector.cpp
// test.c
#include "stdio.h"
#include "dlfcn.h"
void (*add)(char*);
void (*list)(char*);
int main(void)
{
char buff[1024];
void *dp;
dp=dlopen("./vector.so",RTLD_LAZY);
add=dlsym(dp,"vector_add_string");
list=dlsym(dp,"vector_list_strings");
add("hello");
add("bye");
list(buff);
printf("%s",buff);
return 0;
}
编译:
gcc -rdynamic -s -o test test.c -ldl
(注意: -ldl 是必须加的)