我想扩展我的库,它目前仅使用 gcc 编译,供 Solaris Studio 使用。
我的想法是执行以下操作:
- 用 C 语言编写包装器函数,通过外部 C 链接公开接口的相关部分。
- 然后使用 gcc 构建这个库。生成的 c-header 和二进制文件与编译器无关,因为不再有名称重整。
- 包括 c-header 并链接到使用 Solaris Studio 编译的项目中。
问题:这是一个可行的方法,还是有更好的解决方案?
注意:除了名称重整之外,还要注意与异常处理相关的问题。
你的计划是正确的。
只要您的库公开与平台 ABI 兼容的 C API(C 类型的大小和对齐方式,调用约定)并且不抛出C++异常,您就不会在使用其他编译器或语言链接库时遇到麻烦。
您还可以为 C API 添加仅 C++ 标头包装器,使其易于从C++和异常安全中重用。