【发布时间】:2016-05-21 03:48:58
【问题描述】:
我想在我的 swift-project 中包含 libgpg-error 和 libgcrypt 并创建了以下 module.modulemaps:
libgpg错误:
module libgpgerror {
header "/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgpgerror/gpg-error.h"
link "'/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgpgerror/libgpgerror-1.21.dylib'"
export *
}
libgcrypt:
module libgcrypt {
header "/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgcrypt/gcrypt.h"
link "'/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgcrypt/libgcrypt-1.6.5.dylib'"
export *
}
我还在项目和目标中添加了“Swift 编译器 - 搜索路径/导入路径”:/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/**。
模块已找到,路径正确。
但是,如果我想编译项目,我会收到以下错误:
ld: library not found for -l'/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgpgerror/libgpgerror-1.21.dylib' for architecture x86_64
如果我这样做了
file /Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgpgerror/libgpgerror-1.21.dylib
我得到了输出
/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgpgerror/libgpgerror-1.21.dylib: Mach-O 64-bit dynamically linked shared library x86_64
所以看来图书馆在正确的地方,也有正确的架构。
编辑
我找到了一种解决方法:我从模块映射中删除了链接指令并手动链接了库;这似乎有效。但为什么呢?
module libgpgerror {
header "/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgpgerror/gpg-error.h"
export *
}
【问题讨论】:
-
你在使用 Swift 包管理器吗?您是如何手动链接库的?
-
我能够通过在 swift build 命令中明确指定 dylib 路径来构建它。
swift build -Xlinker -L/usr/local/lib/ -Xcc -I/usr/local/include/ -
如果你不添加链接指令,你可以指定
-luv标志并生成一个xcodeproj,它将设置必要的标志:swift build -Xlinker -L/usr/local/lib/ -Xcc -I/usr/local/include/ -Xlinker -luv --generate-xcodeproj -
我不使用包管理器;我“手动”编译了 libgpgerror(使用
make)。要手动链接库,我只是将 dylib 拖到 Xcode 并确保它已添加到我项目目标中的Linked Frameworks and Libraries-section。
标签: xcode build shared-libraries ld