Xcode消除编译器警告的方法

在iOS 不断的升级中,我们经常会遇到一些旧的api或者是属性已经弃用,系统提示采用新的API或者属性替换,可是为了版本上的兼容我们可能还是会用一些就的API或属性,这是系统编译出现黄色的警告,有强迫症的同学看了会非常不舒服。那么如何去掉呢?

1、如果是警告(PerformSelector may cause a leak because its selector is unknown)

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
     //这里是弃用的API调用
    #pragma clang diagnostic pop

2、如果是警告('dismissModalViewControllerAnimated:' is deprecated: first deprecated in iOS 6.0)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated"
//这里是弃用的属性
#pragma clang diagnostic pop

3、如果是警告(Null passed to a callee that requires a non-null argument)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnonnull"
//这里是弃用的属性
#pragma clang diagnostic pop

4、如果是警告(Undeclared selector 'DWJQkeyboardWillShow:')

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
//这里是弃用的属性
#pragma clang diagnostic pop

5、如果是警告(Auto property synthesis will not synthesize property 'superColor'; it will be implemented by its superclass, use @dynamic to acknowledge intention)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-property-synthesis"
//这里是弃用的属性
#pragma clang diagnostic pop

6、如果警告类似('automaticallyAdjustsScrollViewInsets' is deprecated: first deprecated in iOS 11.0 - Use UIScrollView's contentInsetAdjustmentBehavior instead)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
//这里是弃用的属性
        self.automaticallyAdjustsScrollViewInsets=YES;
#pragma clang diagnostic pop
### 解决方案分析 在 M1 MacBook Pro 上编译 GloVe 时遇到 `clang: error: the clang compiler does not support -march=native` 的问题[^1],这主要是因为 Apple Silicon 架构下的 Clang 编译器并不支持 `-march=native` 参数。此参数通常用于指定目标 CPU 的架构特性以优化性能,但在 ARM 平台上该选项不可用。 对于涉及 `armv4t` 架构不支持的问题以及链接器错误的情况,可以尝试以下方法: #### 方法一:移除或替换 `-march=native` 通过修改 Makefile 或构建脚本中的编译选项,将 `-march=native` 替换为适合当前平台的目标架构标志。例如,在 ARM 平台下可使用 `-mcpu=apple-m1` 来替代。 以下是调整后的代码片段: ```bash gcc -c src/vocab_count.c -o build/vocab_count.o -lm -pthread -O3 -mcpu=apple-m1 -funroll-loops -Wall -Wextra -Wpedantic ``` #### 方法二:检查 CMake 配置文件 如果项目依赖于 CMake 进行配置,则需确认其内部模块是否正确处理了 Clang 编译器的行为。根据引用提到的内容[^2],CMake 文件可能未适配特定版本的 Clang 工具链设置。因此建议手动编辑相关路径下的 `Clang.cmake` 文件,确保其中定义的工具链与实际使用的保持一致。 #### 方法三:增加缺失库的支持 针对类似于 `"Undefined symbols for architecture"` 类型的链接失败情况,可通过向项目的 **Linker Flags** 添加必要的动态库来修复。具体操作是在 Xcode 中定位到对应的 Target 设置界面,找到 **Build Phases -> Link Binary With Libraries** 节点并加入所需的 `.dylib` 文件;或者直接补充命令行参数如 `-licucore` 所述[^3]。 #### 方法四:屏蔽不必要的警告信息 有时过多无关紧要的消息干扰排查过程,此时可以根据需求过滤掉部分提示语句。利用 ARM 嵌入式开发环境里介绍的技术手段[^4],适当增删某些开关项达到静默执行的效果。比如忽略未知指令集带来的告警: ```bash -Wno-error=unknown-warning-option ``` 以上措施综合运用能够有效缓解乃至彻底消除上述提及的各种异常状况。 ### 示例修正后的 Makefile 片段 假设原始 Makefile 如下所示: ```makefile CC=gcc CFLAGS=-O3 -march=native ... LDFLAGS=-lm -pthread ... all: vocab_count glove cooccur shuffle vocab_count: $(OBJS) $(CC) -o $@ $^ $(LDFLAGS) ... ``` 更新后形式应改为: ```makefile CC=gcc ifeq ($(shell uname -a | grep Darwin),Darwin) CFLAGS=-O3 -mcpu=apple-m1 ... # For macOS with Apple Silicon else CFLAGS=-O3 -march=native ... # Default option for other platforms endif LDFLAGS=-lm -pthread ... all: vocab_count glove cooccur shuffle vocab_count: $(OBJS) $(CC) -o $@ $^ $(LDFLAGS) ... ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值