gpt4 book ai didi

Xcode "ld: library not found [...] for architecture x86_64"

转载 作者:行者123 更新时间:2023-12-04 15:09:26 29 4
gpt4 key购买 nike

我想在我的 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 *
}

库加密:
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 *
}

最佳答案

链接指令仅指定链接库的名称。也就是说,它应该为库指定链接器标志的后缀。该指令似乎采用“-l”并连接名称以生成链接器标志。

这意味着指定模块映射的正确方法如下。

module CGcrypt {
header "/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgcrypt/gcrypt.h"
link "gcrypt"
export *
}

这将生成链接器标志 -lgcrypt这是正确的链接器标志。

但是,还有另一个问题是链接器需要能够找到 gcrypt 的 dylib 文件,并且默认情况下它只在某些路径上查找。这些路径可以通过运行 clang -Xlinker -v 找到。 .我的输出如下所示:
tylercloutier$ clang -Xlinker -v
@(#)PROGRAM:ld PROJECT:ld64-264.3.101
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em (tvOS)
Library search paths:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/lib
... more stuff ...

现在我不确定,但我怀疑正常的搜索路径可能是
/usr/lib
/usr/local/lib

但我认为 Xcode 已更改我的搜索路径以指向 MacOSX10.11.sdk/usr/lib ,顺便提一下,它与 /usr/lib 具有基本相同的文件集(它们没有符号链接(symbolic link))。实际上,在 El Capitan 中,由于系统完整性保护,即使 sudo 也不允许您编辑 /usr/lib .

因此,我遇到的问题是,即使我已将库安装到 /usr/local/lib , clang 无法链接它们。为了解决这个问题,我可以明确指定搜索路径。
swift build -Xlinker -L/usr/local/lib/

我们要去参加比赛了。我什至可以生成一个 xcodeproj,它已经在 Other Linker Flags 中设置了适当的链接器标志.
swift build -Xlinker -L/usr/local/lib/ --generate-xcodeproj

如果您在模块映射文件中省略了链接指令,则可以将其指定为标志:
module CGcrypt {
header "/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgcrypt/gcrypt.h"
export *
}

像这样
swift build -Xlinker -L/usr/local/lib/ -lgcrypt

如何更改默认库搜索路径,我不知道。但是,如果其他人可以阐明这件事,那就太好了!

关于Xcode "ld: library not found [...] for architecture x86_64",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35321202/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com