用c++开发的动态库,c能访问吗?
答案是可以.
具体怎么做?
请看以下例子:
#include
class car
{
public:
void show()
{
std::cout<<"hello,world!"< }
};
extern "C" void hello()
{
car *a=new car();
a->show();
delete a;
return;
}
以上是一个C++写的例子,我们可以通过以下命令将其编译成为一个动态库
aCC -AA +DD64 -b +z -g -lCsup_v2 -lstd_v2 -lc car.cpp -o libcar.sl
#include
#include
int main() {
int i=0;
void* handle = dlopen("/tmp/libcar.sl", RTLD_LAZY);
if (!handle) {
printf("cannot open library:%s\n",dlerror());
return 1;
}
typedef void (*showhello_t)();
dlerror();
showhello_t hello = (showhello_t) dlsym(handle, "hello");
const char *dlsym_error = dlerror();
if (dlsym_error) {
dlclose(handle);
return 1;
}
hello();
dlclose(handle);
printf("handle closed!\n");
return 0;
}
以上是调用动态库的代码,是个C程序.我们可以用以下命令产生执行文件:
cc +DD64 -g test.c -o t
执行t的时候,就会调用相应的动态库.唯一有缺憾的地方就是最后会core dump.就是在最后退出程序的时候.不知道为什么.如果有人愿意指点,就太好了.
(以上程序在hp-ux下编译通过)
阅读(1553) | 评论(1) | 转发(0) |