当前位置: 技术问答>linux和unix
静态库编成动态库问题,大家帮忙
来源: 互联网 发布时间:2016-05-30
本文导语: 小弟目前做一个东西,但是对方只给了一个.a和.h ,那个.a和.h使用c++写的,但是我要在我的c代码里调用.h中的函数,我试着把那个.h中的函数在一个新文件中封成c的函数,然后编译链接成.so。但是在我的程序里调那...
小弟目前做一个东西,但是对方只给了一个.a和.h ,那个.a和.h使用c++写的,但是我要在我的c代码里调用.h中的函数,我试着把那个.h中的函数在一个新文件中封成c的函数,然后编译链接成.so。但是在我的程序里调那个函数不起作用,请问这个问题要怎么解决?
目前拿不到那个.a的源代码所以只能想办法在c代码里调用那个c++的静态库里的函数,大家帮忙了!
目前拿不到那个.a的源代码所以只能想办法在c代码里调用那个c++的静态库里的函数,大家帮忙了!
|
.h文件加上
#ifdef __cplusplus
extern "C" {
#endif
....
...
#ifdef __cplusplus
}
#endif
然后自己的C文件中包含.h文件
编译时,加上.a文件
如果你的.a文件生成的平台环境和你目前使用相同的话,可以顺利编译
#ifdef __cplusplus
extern "C" {
#endif
....
...
#ifdef __cplusplus
}
#endif
然后自己的C文件中包含.h文件
编译时,加上.a文件
如果你的.a文件生成的平台环境和你目前使用相同的话,可以顺利编译
|
貌似调用动态库还是静态库都是同一回事。问题是:直接写个c程序,调用.a成功与否?
|
最好的解決辦法是將你的.c文件改成.cpp的...
這個問題以前C/C++版也遇到過,你可以參看這個:
http://topic.csdn.net/u/20071102/00/a2c8cef5-e96e-4ec9-adc9-c26e089379e9.html
這個問題以前C/C++版也遇到過,你可以參看這個:
http://topic.csdn.net/u/20071102/00/a2c8cef5-e96e-4ec9-adc9-c26e089379e9.html
|
http://c.chinaitlab.com/c/skill/200902/776470.html
用#extern "C"处理吧
用#extern "C"处理吧
|
这个不行吧,lz没有.a的源代码,修改不了任何东西!我觉得3楼的方法可以!
不准确的说,C++是C的升级版,一般对升级来说,向下兼容(C++中调用C)可以,用extern "C", 但是很难支持向上兼容(C中调用C++);
GOOD LUCK!!
|
用全局函数封装这些C++接口,然后把.a解开成.o后一起编译成.so。应该可以吧
|
综上,楼主的问题是C想要调用C++函数,而C++函数又不能增加extern "C",C代码页不能修改为C++的, 和静态还是动态库好像没什么关系。看起来是比较头疼。
如果光在.h文件里面加extern "C",有没有用? 又或者在原有C++函数外面再封装一层C++函数,对这些封装函数加上extern "C",不知有没有效?
如果光在.h文件里面加extern "C",有没有用? 又或者在原有C++函数外面再封装一层C++函数,对这些封装函数加上extern "C",不知有没有效?
|
试试在一个.cpp文件中写些用extern "C"修饰的C++函数来调用那个.a中的函数,把这个.cpp文件编译成一个.so,把这些函数声明写在一个.h文件中,用C程序包含这个.h文件后应该可以直接调用这个.so中的函数。祝你好运!
|
extern "C"
跟楼主想要的效果是正好相反...
楼主想要的是一种 extern "C++",此词为本人自造...
跟楼主想要的效果是正好相反...
楼主想要的是一种 extern "C++",此词为本人自造...
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。