为 Mac Catalyst 构建,但链接为 macOS 构建的目标文件,用于体系结构 x86_64

时间:2021-07-15 10:58:44

标签: c++ xcode static-libraries ld mac-catalyst

Xcode 中,我的 Catalyst 项目构建失败,错误如下:

ld: in /build-dir/libBackend.a(my-file.cpp.o), building for Mac Catalyst, but linking in object file built for macOS, for architecture x86_64

我该如何解决上述问题?
(甚至意味着什么)。

<块引用>

注意libBackend.a 是链接到我的应用程序的静态库(而 my-file.cpp 代表该库中的某个文件)。

1 个答案:

答案 0 :(得分:0)

如果您允许,这就是我修复它的方法;但首先,日志的含义:

building for Mac Catalyst”部分令人困惑,因为它是在提到 libBackend.a 文件之后编写的。

消息听起来像“your library is built for Catalyst but my-file.cpp.o is built for macOS”。
但它实际上意味着:

  • 您正在尝试为 Catalyst 构建,
  • 但是你的整个库,或者至少是 my-file.cpp.o 对象文件,
  • 专为 macOS 打造(不针对 Catalyst)。

解决方案:

修复是为了确保正确的标志确实被传递给 clang-compiler !!
我的意思是,虽然“-target x86_64-apple-ios13.6-macabi”在我的旗帜中,
由于错误,目标标志从未到达编译器。

测试:

如果下面导致编译错误(无论是 C、C++、Obj-C),那么你有同样的问题。

#ifdef __APPLE__
#   include <TargetConditionals.h>
#   if !TARGET_OS_MACCATALYST
#       error "Unsupported platform!"
#   endif
#endif

背景:

我正在实施CMake support for Xcode on Github
它支持 iOS、Mac 的 Catalyst 以及可能 tvOSwatchOS
(因为即使在 2021 年,CMake 仍然没有内置支持)。