Mat*_*agé 5 c++ gcc g++ static-libraries
根据这个问题的答案(为面向对象的 C++ 代码开发 C 包装器 API),我设法为我的 C++ 代码编写了一个 C 包装器。
我想将我的包装器编译并链接到一个静态库(使用 g++ 编译),该库只能使用 gcc (而不是 g++)使用、编译和链接。这样,库的用户就不必关心库是用 C++ 编写的。
这有可能吗?
此链接解释了一些编译器选项和场景:http://docs.oracle.com/cd/E19422-01/819-3690/Building.Libs.html 具体来说:
如果要构建一个用 C++ 编写但可与 C 程序一起使用的库,则必须创建 C API(应用程序编程接口)。为此,请将所有导出函数设置为 extern“C”。请注意,这只能对全局函数执行,而不能对成员函数执行。
如果 C 接口库需要 C++ 运行时支持并且您要与 cc 链接,则在使用 C 接口库时还必须将应用程序与 libC(兼容模式)或 libCrun(标准模式)链接。(如果 C 接口库不需要 C++ 运行时支持,则不必链接 libC 或 libCrun。)对于存档库和共享库,链接步骤有所不同。
提供存档的 C 接口库时,必须提供有关如何使用该库的说明。
如果 C 接口库是在标准模式(默认)下使用 CC 构建的,则在使用 C 接口库时将 -lCrun 添加到 cc 命令行。如果 C 接口库是在兼容模式 (-compat) 下使用 CC 构建的,则在使用 C 接口库时将 -lC 添加到 cc 命令行。提供共享 C 接口库时,您必须在构建库时创建对 libC 或 libCrun 的依赖项。当共享库具有正确的依赖关系时,使用该库时无需在命令行中添加 -lC 或 -lCrun 。
如果您在兼容模式 (-compat) 下构建 C 接口库,请在构建库时将 -lC 添加到 CC 命令行。如果您在标准模式(默认)下构建 C 接口库,请在构建库时将 -lCrun 添加到 CC 命令行。如果要删除对 C++ 运行时库的任何依赖项,则应在库源中强制执行以下编码规则:
不要使用任何形式的new或delete,除非您提供自己的相应版本。不要使用异常。不要使用运行时类型信息 (RTTI)。