编译/链接Objective-C项目与C库的实现

时间:2014-10-03 03:29:05

标签: objective-c

我有以下情况:

  • 我的代码来自一个基本上用C语言编写的项目,旨在针对与iOS连接的第三方库进行编译 - 所以我基本上有一些C代码,加上一个头文件定义调用的原型,如AddImageAtThisPosition() ,PlayMP3()等 - 为了清楚起见,我所拥有的所有代码/头文件都是“纯C”;
  • 我正在Xcode中构建一个新项目,我在其中导入了这个旧的C代码,我正在编写自己的AddImageAtThisPosition()等实现,其实现显然需要在Objective-C中。

我已将我的实现放在.m文件中,我认为这应该是放置“一些调用Objective-C方法的C代码”的正确位置。一切编译确定,但在链接时:

  • 我在.m文件中定义的函数显然没有找到 - 我假设我需要在Xcode中做一些额外的事情来说“请实际链接从这个.m文件生成的目标文件” - 其中是这个选项还是我需要做什么?
  • 当我尝试从其他Objective C类调用C函数ThisFunction()时,我得到一个链接时错误,即无法找到函数_ThisFunction()。我假设这是在编译期间发生的一些名称错误 - 所以有人可以告诉我在从Objective C方法中调用时正确找到C函数需要做什么吗?

1 个答案:

答案 0 :(得分:1)

如果在.cpp文件中实现该功能,则标题中需要extern "C"才能将它们公开给C / ObjC。

最简单的方法是使用__BEGIN_DECLS

中的__END_DECLScdefs.h宏包装标头