【发布时间】:2008-12-18 05:20:45
【问题描述】:
是否有可能有一个 C 静态库 API,它在内部使用 C++ 并对库的用户隐藏它?
我编写了一个可移植的 C++ 库,希望静态链接到 iPhone 应用程序。
我使用 Max OS X 的“静态库”模板创建了一个 Xcode 项目,并复制了源代码,并使用 (extern "C") 编写了一个 C wapper(处理异常)。
我正在尝试在另一个 Cocoa iPhone 应用程序中使用生成的库(.a 文件)。
如果我在调用的 ObjectiveC 文件上使用 (.mm) 扩展名并在库中的实现类上使用 (.cpp) 扩展名,那么一切正常。
但是当我尝试将包装文件更改为 (.c) 扩展名时,我在链接时得到未解析的符号,即使所有包装函数文件都只是 C 函数。
仅仅因为 C++ 在库内部使用,是否意味着在外部它仍然必须被视为 C++ 程序。反正没有强制执行这种抽象吗?
编辑:感谢您的回复,
我一直在使用 extern "C",我只是不确定调用项目中需要哪些配置。 IE。如果调用投影需要知道它是否使用 C++ 或者可能是无知的并认为它是一个纯粹的 C 库。
看来我做不到,我必须在我的 ObjectiveC 类中使用 (.mm) 文件。
【问题讨论】:
-
您是否使用 extern "C" 声明您的 C 库函数?
-
Akusete,你的问题真的不是关于 Objective-C 的……而是关于 C/C++ 和工具的问题。我认为您的问题是您没有获得链接的 C++ 运行时支持,因为您正在链接 C 应用程序的 Xcode 东西。如果 Q 中没有关于 Obj-C 的具体内容,请不要使用 Obj-C 标记
-
我的错,我没有意识到你已经删除了它。