将C库导入Swift项目

时间:2016-06-16 00:02:55

标签: ios c xcode swift

我正在尝试将libsass(一个C库)导入我用Swift编写的OSX项目中。但不知何故,我正在处理很多依赖问题。顺便说一下,我在本指南中使用模块地图方法:https://spin.atomicobject.com/2015/02/23/c-libraries-swift/

libsass repo:https://github.com/sass/libsass

我可以在c:

中运行version.c(提供示例libsass)程序
#include <stdio.h>
#include "sass/context.h"
int main() {
  puts(libsass_version());
  return 0;
}

我的方法是在&#39; libsass / include&#39;中导入头文件。目录。

以下是迄今为止的尝试:

1 我构建了一个module.map文件并将其放在libsass目录中。

module libsass [system] {
    header "include/sass.h"
    export *
}

2 然后我将目录添加到我的swift项目中

3 设置Swift编译器&gt;搜索路径&gt;导入路径为&#39; $ {SRCROOT} / libsass&#39;

4 构建,我遇到了这个:

'sass/base.h' file not found with <angled> include; use "quotes" instead
'sass/version.h' file not found with <angled> include; use "quotes" instead
'sass/values.h' file not found with <angled> include; use "quotes" instead

5 构建设置&gt;搜索路径&gt;标题搜索路径设置为&#39; $(PROJECT_DIR)/ libsass / include&#39;

构建设置&gt;搜索路径&gt;图书馆搜索路径设置为&#39; $(PROJECT_DIR)/ libsass / include&#39;

这次我没有看到以前的错误,但在test_superselector.cpp中遇到了一个新错误:

'../ast.hpp' file not found 

6 我添加了&#39; -lsass&#39;构建设置&gt;链接&gt;其他链接器标志。因为在提供libsass的示例中,它们使用-lsass标志来编译c代码。

同样,没有好处。

我花了两天时间试图解决这个问题,但没有明确的进展。请查看libsass回购。任何帮助表示赞赏。的谢谢!

1 个答案:

答案 0 :(得分:0)

我简要地看了一下github上的libsass代码。无法找到ast.hpp文件,因为您必须已将libsass源目录添加到Xcode项目中,并且它正在尝试将库源构建为项目的一部分。

由于您在链接器标志中添加了-lsass,我认为您正在尝试在项目中使用已构建的库,这是一种更简洁的方法,而且模块映射很有用。

您不应该将libsass目录添加到Xcode项目中。您可以将包含libsass标头和库的目录放在项目的目录中,这与将它们添加到项目中的方式不同。

header中的module.map行应该具有相对于module.map位置的标题的绝对路径或路径。

其他一些观察结果:

  • 图书馆搜索路径应包含libsass所在的目录 库文件位于。例如,如果它是静态库, 然后该文件将被称为libsass.a
  • 从查看库源代码,它是一个C ++库,所以你不会 能够直接在Swift中使用它;包装将是必要的, 例如,用Objective-C ++编写。