【问题标题】:How to use libxml in Swift? [closed]如何在 Swift 中使用 libxml? [关闭]
【发布时间】:2014-08-09 16:24:11
【问题描述】:

我尝试使用这种新语言用我的一些旧代码开始一个新项目, 我在旧项目中使用了 Libxml2.2,因此在我将代码放入新项目后,xcode 显示“找不到 libxml.h/parse.h 文件”。 我已经导入了“libxml2.2.dylib”

【问题讨论】:

标签: ios objective-c swift


【解决方案1】:

我已经让它与 CommonCrypto https://github.com/onmyway133/CommonCrypto.swift 一起工作,但 libxml 应该是一样的。需要注意的事项

module.modulemap

阅读http://clang.llvm.org/docs/Modules.html#module-map-language

创建一个名为libxml2的文件夹(在我的例子中,它与我的项目文件在同一目录下),然后在里面创建一个module.modulemap文件

module libxml2 {
  header "/usr/include/libxml2/libxml/tree.h"
  export *
}

这里我只添加tree.h,但您可以根据需要添加更多

SWIFT_INCLUDE_PATHS

转到目标构建设置,将其添加到Import Paths

${SRCROOT}/libxml2

HEADER_SEARCH_PATHS

阅读Why am I getting this "libxml/tree.h file not found" error?

转到目标构建设置,将其添加到Header Search Paths

$(SDKROOT)/usr/include/libxml2

有趣的相关帖子

【讨论】:

    【解决方案2】:

    为了在 Xcode 6 中使用我的项目,我导航到我的项目的“构建设置”,并选择了我的目标。然后我在 Build Settings 中搜索了“Header Search Paths”,并在调试和发布中添加了以下行:

    $(SDKROOT)/usr/include/libxml2
    

    【讨论】:

    • 这不起作用,因为编译器会说你不能包含非模块化包含
    • 目前有libxml2的modulemap文件;也许在写这个问题/评论时它并不存在。请注意,从 Xcode 9 开始,该文件实际上建议您“将“-Xcc -I$(SDKROOT)/usr/include/libxml2”添加到 Xcode 项目中的 OTHER_SWIFT_FLAGS”。
    【解决方案3】:

    我发现如果将“-lxml2”添加到 OTHER_LDFLAGS,则可以省略导入“libxml2.2.dylib”。

    【讨论】:

      【解决方案4】:

      您必须像这样创建一个包含libxml/tree.h 标头的自定义module map 文件:

      module libxml [system] {
          header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/libxml2/libxml/tree.h"
          export *
      }
      

      然后你把这个文件(module.modulemap)放在一个文件夹中——例如模块——并将它添加到你的项目和目标的build settings

      您现在可以在代码中使用@import libxml;

      【讨论】:

        猜你喜欢
        • 2014-07-25
        • 1970-01-01
        • 2016-12-19
        • 1970-01-01
        • 2014-08-31
        • 2012-02-01
        • 2022-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多