我正在尝试将libsass(一个C库)导入到我用Swift编写的OSX项目中。但是我以某种方式处理了很多依赖问题。顺便说一句,我在此指南中使用模块映射方法:https://spin.atomicobject.com/2015/02/23/c-libraries-swift/



libsass回购:https://github.com/sass/libsass

我可以在c中运行version.c(提供了libsass示例)程序:

#include <stdio.h>
#include "sass/context.h"
int main() {
  puts(libsass_version());
  return 0;
}


我的方法是将头文件导入“ libsass / include”目录中。

到目前为止,这里已经尝试过了:

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

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


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

3将Swift编译器>搜索路径>导入路径设置为'$ {SRCROOT} / libsass'

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构建设置>搜索路径>标题搜索路径设置为'$(PROJECT_DIR)/ libsass / include'

构建设置>搜索路径>库搜索路径设置为'$(PROJECT_DIR)/ libsass / include'

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

'../ast.hpp' file not found


6
我在构建设置>链接>其他链接器标志中添加了“ -lsass”。由于在libsass提供的示例中,它们使用-lsass标志来编译c代码。

一样,不好。

我花了两天的时间试图弄清楚这一点,但没有明显的进展。请查看libsass回购。任何帮助表示赞赏。谢谢!!

最佳答案

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

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

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

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

其他一些观察:


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

关于ios - 将C库导入Swift项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37847734/

10-08 22:54