将静态C ++库包含到Objective C项目中

时间:2010-12-02 08:06:07

标签: c++ objective-c shared-libraries

我想创建一个C ++ so库并将其包含在Objective C代码中。我在XCode工作。 这是C ++代码:

-------------- core.cpp ----------

#include <vector>
#include <algorithm>

extern "C" void my_sort(std::vector<int>& a) throw()
{
 sort(a.begin(), a.end()); // this is std::vector's sort function 
}

所以我想创建一个so库,将它包含在Obejctive C代码中。 如何包含或导入? ..我想调用my_sort()函数?

谢谢!

1 个答案:

答案 0 :(得分:0)

这里的麻烦是你的功能有外部C链接。因此,它不能使用std::vector类型的参数,也不能使用throw声明,因为它们是C ++的东西。

要将其包含在您的目标C代码中,您必须编写附带的头文件,该文件将声明您的导出函数。一旦从其界面中删除了对C ++的所有引用,它将更容易导出。它还将避免包含C ++标头。

然后,要从Objective C代码中使用它,请#include您的头文件,并将链接器信息提供给您的库。