clang: warning: argument unused during compilation: ‘-no-pie‘ [-Wunused-command-line-argument]

在Mac上使用Golang编译时遇到clang警告:'-no-pie'未使用。解决方法是通过修改goenv,设置编译器为clang和clang++。执行命令`goenv wCC=clang`和`goenv wCXX=clang++`即可消除警告。

mac上使用golang编译时出现警告

clang: warning: argument unused during compilation: '-no-pie' [-Wunused-command-line-argument]

在这里插入图片描述

解决方案

mac编译器默认使用clang,需要修改goenv,执行以下命令。

go env -w CC=clang
go env -w CXX=clang++
执行命令./class_extractor -p . . 报错:error: unsupported option '--build-id' error: unsupported option '--eh-frame-hdr' error: unsupported option '--hash-style=gnu' error: unknown argument: '-plugin' error: unknown argument: '-plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/10.3.1/lto-wrapper' error: unknown argument: '-plugin-opt=-fresolution=/tmp/ccAH8mp9.res' error: unknown argument: '-plugin-opt=-pass-through=-lgcc_s' error: unknown argument: '-plugin-opt=-pass-through=-lgcc' error: unknown argument: '-plugin-opt=-pass-through=-lc' error: unknown argument: '-plugin-opt=-pass-through=-lgcc_s' error: unknown argument: '-plugin-opt=-pass-through=-lgcc' error: unknown argument: '-m' warning: /usr/libexec/gcc/x86_64-linux-gnu/10.3.1/liblto_plugin.so: 'linker' input unused [-Wunused-command-line-argument] warning: -Z-reserved-lib-stdc++: 'linker' input unused [-Wunused-command-line-argument] warning: -lm: 'linker' input unused [-Wunused-command-line-argument] warning: -lgcc_s: 'linker' input unused [-Wunused-command-line-argument] warning: -lgcc: 'linker' input unused [-Wunused-command-line-argument] warning: -lc: 'linker' input unused [-Wunused-command-line-argument] warning: -lgcc_s: 'linker' input unused [-Wunused-command-line-argument] warning: -lgcc: 'linker' input unused [-Wunused-command-line-argument] warning: /home/david/workspace/demos/demo06_clang02/.: 'linker' input unused [-Wunused-command-line-argument] error: unable to handle compilation, expected exactly one compiler job in '' Error while processing /home/david/workspace/demos/demo06_clang02/..
最新发布
08-08
在使用 Clang 编译器进行编译时,有时会遇到如下警告信息: ``` clang: warning: argument unused during compilation:--gcc-toolchain=...’ [-Wunused-command-line-argument] ``` 此警告表明指定的命令行参数 `--gcc-toolchain` 在当前编译过程中未被使用。Clang 编译器并不识别该参数,因为它属于 GCC 工具链的特定选项。当构建系统错误地将适用于 GCC 的参数传递给 Clang 时,就会触发此警告[^1]。 ### 原因分析 1. **工具链配置问题**:构建系统可能配置了针对 GCC 的工具链路径(如 `--gcc-toolchain`),但在实际编译过程中使用的是 Clang 编译器。 2. **交叉编译环境设置不当**:在交叉编译环境中,某些项目可能会尝试通过 CMake 或其他构建工具传递特定于 GCC 的参数,而这些参数对 Clang 并不适用[^2]。 3. **依赖外部 SDK 或 NDK 的构建脚本**:例如,在 Android 开发中,某些构建脚本可能会自动添加与 GCC 相关的参数,而在使用 Clang 编译时导致冲突[^4]。 ### 解决方案 #### 方法一:移除或注释掉无效参数 检查项目的构建配置文件(如 `CMakeLists.txt`、`Makefile` 或构建脚本),找到包含 `--gcc-toolchain` 的地方,并将其删除或注释掉。例如,在 CMake 中可以通过以下方式修改编译器标志: ```cmake # 删除或注释掉以下行 add_compile_options(--gcc-toolchain=/path/to/gcc-toolchain) ``` #### 方法二:根据编译器类型有条件地设置参数 如果需要支持多种编译器(GCC 和 Clang),可以使用条件判断来仅在使用 GCC 时应用 `--gcc-toolchain` 参数: ```cmake if(CMAKE_C_COMPILER_ID STREQUAL "GNU") add_compile_options(--gcc-toolchain=/path/to/gcc-toolchain) endif() ``` #### 方法三:使用正确的编译器工具链定义方式 对于交叉编译场景,应使用更通用的方式指定工具链,而不是直接传递 `--gcc-toolchain`。例如,在 CMake 中可以使用 `-DCMAKE_TOOLCHAIN_FILE` 指定一个工具链描述文件: ```bash cmake -DCMAKE_TOOLCHAIN_FILE=toolchains/aarch64-linux-gnu.cmake .. ``` 其中 `toolchains/aarch64-linux-gnu.cmake` 文件内容可能如下: ```cmake set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) ``` #### 方法四:更新构建系统或 SDK 版本 某些旧版本的 SDK 或构建工具可能会硬编码插入 GCC 特定参数。建议升级到最新版本以获得更好的兼容性支持[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值