呼叫C/C++;用g++;,在用gcc编译的程序中 我有一套C++开发的软件库模块。因此,我使用g++来编译我的软件

呼叫C/C++;用g++;,在用gcc编译的程序中 我有一套C++开发的软件库模块。因此,我使用g++来编译我的软件,gcc,g++,Gcc,G++,这必须被用C编写并用gcc编译的各种现有应用程序使用 当其他团队使用G++编译代码时,由于C++的严格类型检查规则,他们开始大量编译错误。这破坏了他们的申请。更糟糕的是,他们正在使用一些第三方库代码,这些代码不能用g++编译 如果他们使用gcc,则存在链接器错误(未解析的符号) 所以,我的问题是。。。 “有没有一种方法可以使我的库代码与它们的应用程序链接,而不改变各自的编译器?也就是说,我仍然必须使用g++,因为我在代码中大量使用类/对象,而它们没有选择使用g++,这将破坏它们的应用程序?” 谢

这必须被用C编写并用gcc编译的各种现有应用程序使用

当其他团队使用G++编译代码时,由于C++的严格类型检查规则,他们开始大量编译错误。这破坏了他们的申请。更糟糕的是,他们正在使用一些第三方库代码,这些代码不能用g++编译

如果他们使用gcc,则存在链接器错误(未解析的符号)

所以,我的问题是。。。 “有没有一种方法可以使我的库代码与它们的应用程序链接,而不改变各自的编译器?也就是说,我仍然必须使用g++,因为我在代码中大量使用类/对象,而它们没有选择使用g++,这将破坏它们的应用程序?”

谢谢你的帮助

问候,,
Ravindra

您可能遇到的问题之一可能是不同版本的g++具有不同的ABI格式。至少,不要期望4.1之前的G++版本能够处理使用4.1或更高版本编译的代码

<> P>混合C和C++要求C++代码都输出C兼容接口。这是通过使用
extern“C”
说明符声明自由函数(不能用于类)来实现的


您可能遇到的问题之一可能是不同版本的g++具有不同的ABI格式。至少,不要期望4.1之前的G++版本能够处理使用4.1或更高版本编译的代码

<> P>混合C和C++要求C++代码都输出C兼容接口。这是通过使用
extern“C”
说明符声明自由函数(不能用于类)来实现的


链接预编译的C++代码基本上要求使用相同的精确编译器。有一些方法可以使用(使用简单的旧数据类型或序列化,使用外部的“C”-仅接口),但是如果你尝试使用你的公共接口AS-ISS,那么很多东西就不能工作,而且会中断。链接预编译的C++代码基本上要求你使用相同的精确编译器。有一些方法是可行的(使用普通的旧数据类型或序列化,使用外部“C”-纯接口),但如果您尝试按原样使用公共接口,则有许多方法根本不起作用,并且会出现问题。谢谢您的快速响应。我已经在做这个部分了,我正在使用#ifdef#cplusplus extern“C”#endif部分。但是,我认为,这两个模块(C代码和C++库)都应该用G++编译。如果我错了,请指正。根据你所建议的链接,它是这样说的:*编译编译器时,必须使用C++编译器(例如,静态初始化)*你的C++编译器应该指导链接过程(例如,它可以得到它的特殊库)。* C和C++编译器可能需要来自同一个供应商,并且拥有兼容版本(例如,它们具有相同的调用约定),因为外部约束,我不能满足1和2点。请给出建议。包含main()函数的代码是c代码,将使用gcc编译。我的库必须用g++编译,因为我使用的是类。但是,我通过extern“C”提供了一个包装器接口。好的,这是否意味着我可以让我的库用户使用gcc“编译”,但是当他们链接时,他们是否应该使用g++?谢谢您的快速响应。我已经在做这个部分了,我正在使用#ifdef#cplusplus extern“C”#endif部分。但是,我认为,这两个模块(C代码和C++库)都应该用G++编译。如果我错了,请指正。根据你所建议的链接,它是这样说的:*编译编译器时,必须使用C++编译器(例如,静态初始化)*你的C++编译器应该指导链接过程(例如,它可以得到它的特殊库)。* C和C++编译器可能需要来自同一个供应商,并且拥有兼容版本(例如,它们具有相同的调用约定),因为外部约束,我不能满足1和2点。请给出建议。包含main()函数的代码是c代码,将使用gcc编译。我的库必须用g++编译,因为我使用的是类。然而,我通过extern“C”提供了一个包装器接口。好的,这是否意味着我可以让我的库用户使用gcc“编译”,但是当他们链接时,他们应该使用g++?
extern "C" {
  #include "c_language_headers.h"

  int c_accessible_function(int);

  struct c_accessible_datatype { };
}