当前位置: 技术问答>linux和unix
LINUX环境C++动态链接库如何才能被C应用程序调用?急急!
来源: 互联网 发布时间:2016-08-05
本文导语: 最近做的项目涉及到用C应用程序调用第三方提供的C++动态链接库,是在LINUX环境下, 现在又以下几点不明白,请高手指教: 1、C++动态链接库到底是否可以被C程序调用,毕竟编译器不同 2、若可以,C++动态链接库中涉...
最近做的项目涉及到用C应用程序调用第三方提供的C++动态链接库,是在LINUX环境下,
现在又以下几点不明白,请高手指教:
1、C++动态链接库到底是否可以被C程序调用,毕竟编译器不同
2、若可以,C++动态链接库中涉及到类了,如何向C程序提供接口,毕竟在C中不能声明类
3、若用C程序调用动态链接库,是用动态链接,还是用动态加载,有区别吗?
对方说需要用动态加载方式,即用dlopen()函数进行加载,不明白。
谢谢
现在又以下几点不明白,请高手指教:
1、C++动态链接库到底是否可以被C程序调用,毕竟编译器不同
2、若可以,C++动态链接库中涉及到类了,如何向C程序提供接口,毕竟在C中不能声明类
3、若用C程序调用动态链接库,是用动态链接,还是用动态加载,有区别吗?
对方说需要用动态加载方式,即用dlopen()函数进行加载,不明白。
谢谢
|
有个建议:你再写个C++库,把第三方的类转成API。
关于第3点,动态加载可以参考下面的文章,上面有例子:
http://www.ibm.com/developerworks/cn/linux/sdk/dll/index.html
关于第3点,动态加载可以参考下面的文章,上面有例子:
http://www.ibm.com/developerworks/cn/linux/sdk/dll/index.html
|
dlopen的方法不是必须的吧。
通常C调用C++的库函数需要extern "C"和将类封装成函数, 以下十个简单的例子, AIX环境
通常C调用C++的库函数需要extern "C"和将类封装成函数, 以下十个简单的例子, AIX环境
/**
* @file foo.h
*/
#ifndef FOO_H
#define FOO_H
#ifdef __cplusplus
extern "C" {
#endif
int foo_hello(void);
#ifdef __cplusplus
}
#endif
#endif /* FOO_H */
/**
* @file foo.cpp
*/
#include
using namespace std;
#include "foo.h"
class foo {
public:
foo();
~foo();
int hello();
};
foo::foo()
{
cout