我正在尝试将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/