xcode 为Mac Catalyst构建,但链接为macOS构建的对象文件,适用于x86_64架构

uxh89sit  于 2023-04-22  发布在  Mac
关注(0)|答案(1)|浏览(281)

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

如何修复上面的问题?

(and这是什么意思)。

注意libBackend.a是我的静态库,链接到我的App中(my-file.cpp代表库中的某个文件)。

kqlmhetl

kqlmhetl1#

如果你允许的话,我是这样做的;但首先,日志的意义:
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编译器!!
我是说,虽然“-target x86_64-apple-ios13.6-macabi“出现在我的旗子里,
由于一个错误,target-flag从未到达编译器。

测试:

如果下面的代码导致编译错误(无论是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仍然没有内置支持)。

相关问题