2011-08-04 84 views

回答

2

是的。确保您要使用的所有函数都是extern“C”,并且您只对要使用的函数使用基本类型。

如果您使用与G ++相同的GCC版本,那肯定不会有任何问题。跨版本应该没问题,但可能会有很小的不兼容性。新的GCC(3.0+)符合安腾ABI,因此它们会很好;他们就如何交换&格式数据达成了二元协议。

+0

在我的测试中,我需要添加'-lstdC++'来让程序链接。 –

1

您可以将C应用程序链接到一个C++库, 但你只能包括含有效C头文件 - 而不是C++ - 代码, 使用任何C++调用必须声明与外部的“C函数“ 宣言。

-1

最简单,最简单的方法要做到这一点,假设您的C代码是相当理智的,就是简单地使用g ++构建您的C应用程序。请记住,好的C代码几乎总是以C++编译器为基础构建的。那么就没有特别的考虑,不需要添加外部“C”语句,也不需要ABI问题等,并且无论函数如何声明,都可以轻松使用C++库。

1

您需要确保从C代码调用的C++函数声明为extern "C",并且它们的接口只使用可以由C处理的类型(简单类型,不透明指针等)。

您可能还需要将应用程序与C++编译器(而不是C编译器)链接,以确保为C++库执行了正确的初始化。用于链接的C++编译器必须与用于生成库的C++编译器'相同'。这意味着要么是相同版本的C++编译器,要么是它的兼容版本。这通常意味着如果库是由CompilerB(来自供应商B)生成的,则无法与CompilerA(来自供应商A)链接; C++运行时约定是这样的,不同的编译器(故意地)使用不同的方案来支持C++的不同特性。

0

如果C++库具有C++接口,您不能直接使用它们,则必须创建编译为C++但具有外部“C”链接的包装。这种包装的复杂性将取决于界面的特性,使用C++ - 只有诸如类的特性以及函数/运算符重载将需要将OO接口映射到过程接口。

1

您的问题的答案是“是”,但正如其他人指出的那样,有一些注意事项,对您可以执行的操作的限制& &您是如何做到的。

就在最近与客户讨论这个话题的过程中,我遇到了一篇文章,对这个话题的处理非常好。文章论述了像调用C代码C++代码,从C代码,连接器方面的考虑,功能包装,异常联动规范调用C++代码,以及在C访问C++类等

文章的事情:Mixing C and C++ Code in the Same Program

相关问题