【问题标题】:How to integrate Imebra v5 to a swift command line project如何将 Imebra v5 集成到 swift 命令行项目中
【发布时间】:2021-06-08 19:09:16
【问题描述】:

我正在尝试使用 Xcode 12 将 Imebra 导入一个基本的 swift 5 命令行项目。我遵循了官方的 steps 但我失败了。我可以总结一下整个结构:

项目的结构只是

./
├── main.swift
├── Data
   └── DX_0.dcm
├── Imebra
   └── CMakeLists.txt
   └── docs
   └── examples
   └── library
   └── test
   └── wrappers
   └── build_imebra_macos

主要的swift文件是

// main.swift

import Foundation

print("Hello, Imebra!")

do {
   let pDataSet = try ImebraCodecFactory.load(fromFile: "PathToDicomFileFromExecutable")
    let pImage = try pDataSet.getImageApplyModalityTransform(0)
   print("The image width is", pImage.width)
} catch {
   print(error)
}

按照文档,我通过转到build_imebra_macos 文件夹并运行来编译库

build_imebra_macos % cmake -GXcode -DCMAKE_BUILD_TYPE=Release ..
build_imebra_macos % cmake --build . --config Release

构建成功,新文件夹Release有动态库。现在在 CL Swift 应用程序的 Xcode 项目 SwiftyImebra.xcodeproj 中,我按照下一条指令“打开目标构建设置并在“Swift Compiler/ObjectiveC Bridging Header”下指定 imebra_location/wrappers/objectivec/include/imebraobjc/imebra 的路径.h.”,Imebra_location 更改为 Imebra。

然后当我构建我得到错误

Showing All Messages
Undefined symbol: _OBJC_CLASS_$_ImebraCodecFactory

我是 Swift 新手,我想我需要在 Xcode 中指定源或动态库所在的位置。但是,我也不确定这一点,因为我们已经生成了一个 cpp 动态库,所以它只能与 Objective-C(?)交互。如果这是一个基本问题,我深表歉意......

另外,我想学习如何将 Imebra 作为静态库与 swift 一起使用。

【问题讨论】:

    标签: swift xcode imebra


    【解决方案1】:

    imebra 动态库必须添加到项目中。

    将 imebra.dylib(生成到您的构建文件夹 build_imebra_macos)拖到您的项目中。

    另外,在编译器选项的“库搜索路径”中指定包含dylib的文件夹。

    【讨论】:

    • 嗨,保罗!将生成的 .dylib 文件拖入“Link Binary With Libraries”(构建阶段)并指定我在运行时获得的库路径后:dyld: Library not loaded: @rpath/libimebra.5.dylib Referenced from: PathToDerivedDataFolder Reason: no suitable image found. Did find: /usr/local/lib/libimebra.5.dylib: code signature in (/usr/local/lib/libimebra.5.dylib) not valid for use in process using Library Validation: mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?)
    • 我不想删除验证层。我再次检查了签名,它们正在开发中。
    • 将库移动到可执行文件所在的位置,以便在运行时找到它,或者配置xcode将dll复制到可执行文件位置。
    • 我发现 dylib 也必须使用 Team ID 构建。只要在“库搜索路径”中指定了文件夹,就不需要将 dll 复制/移动到可执行文件中。 Xcode12 似乎更严格
    • 不过,更好的方法是使用 XCODE_EMBED_FRAMEWORKS 并将目标 PROPERTY XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY 设置为 TRUE。您能否将这些提示也添加到您的答案中,我会接受吗?
    猜你喜欢
    • 2017-12-17
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    相关资源
    最近更新 更多