xcode:关于Other Linker Flags

原文出自:http://alloc.sinaapp.com/wp/?p=272

一、关于Other Linker Flags

xcode中,在“Targets”选项下有Other Linker Flags选项,在这里可以填写xcode链接器的参数,如:-ObjC、-all_load、-force_load等。

二、xcode链接器

xcode采用的链接器为ld–GNU,ld是GNU工具链中的一个软件,主要用于将obj文件连接成可执行文件。同时你能使用自己的脚本来控制ld的行为,这是你可以通过-T选项选择你的脚本而不是默认的。可以通过

1
man ld

了解更多。

三、主要参数

这里要说的主要参数是ld工具的参数,也是在Other Linker Flags里常用到的参数。

1.-ObjC

当使用ObjC写的静态类别库(Objective-C static library that contains categories),在程序编译链接时,如果不在Other Linker Flags中填写-ObjC,往往会报错,出现”selector not recognized”。博主无力,原因看不太懂。具体原因请查阅xcode帮助文档

-ObjC的作用是加载用ObjC实现的类、类别等所有成员。

2.-all_load

强制链接器加载所有包含非ObjC的目标文档。

3. -force_load

加载指定的目标文档。-force_load后面需要文档路径,如:

1
-force_load $(TARGET_BUILD_DIR)/libB.a

### 解决方案分析 在 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、付费专栏及课程。

余额充值