![]() |
1
5
编辑: 我可以确认,如果你这样做,正如史蒂文·R·卢米斯建议的那样:
这个问题应该得到解决。事实上,如果不这样做,所构建的库将包含冒犯性的未定义符号:
遵循上述建议后,这是同一命令的结果:
因此,毫无疑问,二进制文件中不存在有问题的符号。 结束编辑。 为iOS交叉编译libicu需要两个单独的步骤:
步骤1之所以必要,是因为libicu将自己引导一点,即它将编译一些中间工具,然后在构建过程的其余部分使用这些工具;这些工具需要在主机平台上运行,所以它们才是可用的。 总之,你可以按照步骤(1。为主机编译):
一旦完成了这项工作,就到了交叉编译(2。针对iOS编译):
哪里
在上面的脚本中(
source
),
最后,你应该考虑到,苹果(一半)拒绝了至少一个与libicu链接的应用程序,因为它使用了保留的API。看看这个 S.O. topic 。 编辑: 很高兴听到你可以编译! 现在来谈谈链接问题。 首先,请检查libicu库的格式是否正确:
输出应该是(对于任何一个库):
如果这是好的,那么下一个问题是:你是为模拟器还是为设备构建?模拟器需要i386库、设备臂库。。。从您显示的错误消息中:
在我看来,你是在对抗模拟器。。。为此,您将需要“普通”macos x libs。。。 |
![]() |
2
2
我使用的是iOS SDK 6.1版本,带有clang,并根据c++11标准库进行构建。我发现设置环境变量(如CXXFLAGS)没有任何影响,试图将它们传递给命令行上的“configure”似乎完全破坏了它。我最终制作了一个clang、clang++和ld脚本,这些脚本允许我传递额外的参数。例如,我的铿锵脚本:
其他的是相同的,但在适当的情况下替换clang++和ld,并分别使用MORE_CXFLAGS和MORE_LDFLAGS。 最后,我制作了这个脚本,它进行了主机构建、模拟器构建和iOS构建。请注意,模拟器构建包括调试信息,iOS版本经过-O2优化。然后,它对libs进行抽脂处理(生成通用二进制文件),并将它们与include文件夹一起复制到INSTALL_PATH指定的目标。第3-5行用于配置脚本。将所有4个脚本放在同一文件夹中,然后从命令行执行最后一个脚本:
|
![]() |
3
2
我现在有了解决所有这些丑陋的简单方法。 https://github.com/dbquarrel/icu4c-xcframework 下载这个makefile,它将获得ICU,并为(macOS,macCatalyst,iOS,iOS模拟器)构建一个适用于(M1/ARM/x86)的ICU.xcframework。 一次注射,所有头痛都消失了。 过了很长时间才回答这个问题,但很可能这么早以前就不可能这样做了。 |
![]() |
4
1
如果你有来源,你真的需要链接库吗?只需将源代码添加到您的XCode项目中,您就可以开始了。。。 如果你真的想构建一个库,我建议你以iPhone为目标,为该库创建一个XCode项目,并将该库链接到你的代码,因为你的库是为在你的MacOS计算机上运行而构建的(根据你的错误日志)。 编辑 为了从命令行构建它,并假设您没有使用iOS 5(因为您的XCode版本),我借用并调整了这组说明,以正确设置标志,从而从 here :
请将IOS版本的前两条说明正确设置为您所在环境的正确值。 如果您要使用iOS 5 SDK,您需要更改编译器二进制文件的名称,因为它们已经更改。 |
![]() |
5
1
re:sync-synchronize:可能有人在原子论上撒谎,或者需要一些gcc库。尝试
|
![]() |
Declan McKenna · 为什么我的模式在非用户换行时中断? 9 年前 |