gcc: error: unrecognized command line option ‘-no-pie’报错

在CentOS中尝试使用gcc-m32-no-pie-olinkbombmain.ophase1.o进行链接时遇到未识别选项'-no-pie'的错误。解决方法是通过yum安装更新的gcc版本。首先安装centos-release-scl-rh,接着安装devtoolset-8-build和devtoolset-8-gdb,然后启用devtoolset-8。升级后,gcc版本升级到8.3.1,问题得到解决。

输入命令gcc -m32 -no-pie -o linkbomb main.o phase1.o将两个可重定位进行连接的时候出错,报错:gcc: error: unrecognized command line option ‘-no-pie’

  • 原因:centos默认gcc编译版本为4点几,所以需要升级gcc,这里使用yum install进行安装。

  • 依次输入下面命令
    sudo yum install centos-release-scl-rh
    sudo yum install devtoolset-8-build
    sudo yum install devtoolset-8-gdb
    source /opt/rh/devtoolset-8/enable,设置开机启动

  • 使用gcc –v查看版本,升级为8.3.1版本
    在这里插入图片描述

Ubuntu中运行vlsi@ubuntu:~/cva6_lib/libtools/riscv-tools/riscv-openocd/build$ cat config.log | grep -i error 显示$ ../configure --prefix=/home/vlsi/cva6_lib/libtools/riscv_install --enable-remote-bitbang --enable-jtag_vpi --disable-werror Configured with: ../src/configure -v --with-pkgversion='Ubuntu 10.3.0-1ubuntu1~18.04~1' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-10-xgJY7J/gcc-10-10.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-xgJY7J/gcc-10-10.3.0/debian/tmp-gcn/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu gcc: error: unrecognized command-line option '-V' gcc: fatal error: no input files gcc: error: unrecognized command-line option '-qversion'; did you mean '--version'? gcc: fatal error: no input files configure:3684: error: in `/home/vlsi/cva6_lib/libtools/riscv-tools/riscv-openocd/build': configure:3686: error: C compiler cannot create executables怎么解决
05-30
Z:\ipc_platform\platform\nvmp\build_dir\target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2\opkg-nocurl\opkg-618\config.log (匹配1次) 行 116: configure: failed program was:Z:\ipc_platform\platform\nvmp\build_dir\target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2\opkg-nocurl\opkg-618\config.log (匹配11次) 行 100: arm-ca9-linux-uclibcgnueabihf-gcc.br_real: error: unrecognized command-line option '-V' 行 101: arm-ca9-linux-uclibcgnueabihf-gcc.br_real: fatal error: no input files 行 105: arm-ca9-linux-uclibcgnueabihf-gcc.br_real: error: unrecognized command-line option '-qversion'; did you mean '--version'? 行 106: arm-ca9-linux-uclibcgnueabihf-gcc.br_real: fatal error: no input files 行 110: configure:3377: arm-ca9-linux-uclibcgnueabihf-gcc -O2 -pipe -fgnu89-inline -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -ftree-vectorize -fno-builtin -fno-common -g -Wno-stringop-truncation -Wno-format-truncation -Wno-sizeof-pointer-div -Wno-stringop-overflow -Wno-format-overflow -Wno-sizeof-pointer-memaccess -Wno-array-bounds -Wno-error=aggressive-loop-optimizations -g -fPIC -z now -z noexecstack -ffunction-sections -fdata-sections -DTARGETVER -luci -lsecurity -I/home/sunhaoming/ipc_platform/platform/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/usr/include -I/home/sunhaoming/ipc_platform/platform/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/include -I/home/sunhaoming/ipc_platform/platform/nvmp/../sdk/soc/nvt9856x/uclibc-toolchain-10.4.0/arm-ca9-linux-uclibcgnueabihf-10.4.0/arm-ca9-linux-uclibcgnueabihf/sysroot/usr/include -L/home/sunhaoming/ipc_platform/platform/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/usr/lib -lz -I/home/sunhaoming/ipc_platform/platform/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/usr/include -I/home/sunhaoming/ipc_platform/platform/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/include -I/home/sunhaoming/ipc_platform/platform/nvmp/../sdk/soc/nvt9856x/uclibc-toolchain-10.4.0/arm-ca9-linux-uclibcgnueabihf-10.4.0/arm-ca9-linux-uclibcgnueabihf/sysroot/usr/include -L/home/sunhaoming/ipc_platform/platform/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/usr/lib -L/home/sunhaoming/ipc_platform/platform/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/lib -fPIE -pie -Wl,-z,relro -Wl,-z,now -z noexecstack -L/home/sunhaoming/ipc_platform/platform/nvmp/../sdk/soc/nvt9856x/uclibc-toolchain-10.4.0/arm-ca9-linux-uclibcgnueabihf-10.4.0/arm-ca9-linux-uclibcgnueabihf/sysroot/usr/lib -L/home/sunhaoming/ipc_platform/platform/nvmp/../sdk/soc/nvt9856x/uclibc-toolchain-10.4.0/arm-ca9-linux-uclibcgnueabihf-10.4.0/arm-ca9-linux-uclibcgnueabihf/sysroot/lib co ... 行 113: collect2: error: ld returned 1 exit status 行 135: configure:3424: error: in `/home/sunhaoming/ipc_platform/platform/nvmp/build_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/opkg-nocurl/opkg-618': 行 136: configure:3426: error: C compiler cannot create executables 行 152: ac_cv_env_CFLAGS_value='-O2 -pipe -fgnu89-inline -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -ftree-vectorize -fno-builtin -fno-common -g -Wno-stringop-truncation -Wno-format-truncation -Wno-sizeof-pointer-div -Wno-stringop-overflow -Wno-format-overflow -Wno-sizeof-pointer-memaccess -Wno-array-bounds -Wno-error=aggressive-loop-optimizations -g -fPIC -z now -z noexecstack -ffunction-sections -fdata-sections -DTARGETVER -luci -lsecurity -I/home/sunhaoming/ipc_platform/platform/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/usr/include -I/home/sunhaoming/ipc_platform/platform/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/include -I/home/sunhaoming/ipc_platform/platform/nvmp/../sdk/soc/nvt9856x/uclibc-toolchain-10.4.0/arm-ca9-linux-uclibcgnueabihf-10.4.0/arm-ca9-linux-uclibcgnueabihf/sysroot/usr/include -L/home/sunhaoming/ipc_platform/platform/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/usr/lib -lz' 行 224: ac_cv_func_strerror=yes 行 306: CFLAGS='-O2 -pipe -fgnu89-inline -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -ftree-vectorize -fno-builtin -fno-common -g -Wno-stringop-truncation -Wno-format-truncation -Wno-sizeof-pointer-div -Wno-stringop-overflow -Wno-format-overflow -Wno-sizeof-pointer-memaccess -Wno-array-bounds -Wno-error=aggressive-loop-optimizations -g -fPIC -z now -z noexecstack -ffunction-sections -fdata-sections -DTARGETVER -luci -lsecurity -I/home/sunhaoming/ipc_platform/platform/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/usr/include -I/home/sunhaoming/ipc_platform/platform/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/include -I/home/sunhaoming/ipc_platform/platform/nvmp/../sdk/soc/nvt9856x/uclibc-toolchain-10.4.0/arm-ca9-linux-uclibcgnueabihf-10.4.0/arm-ca9-linux-uclibcgnueabihf/sysroot/usr/include -L/home/sunhaoming/ipc_platform/platform/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/usr/lib -lz' 搜索 "failed" (1个文件中匹配到1次,总计查找1次) [普通]
最新发布
12-17
你遇到的错误: ``` gcc: error: unrecognized command-line option-add’ ``` 这是一个非常典型的 **命令行参数写法错误**,我们来详细解释原因和解决方案。 --- ## ❌ 错误原因分析 这个错误通常是因为你在调用 `gcc` 时 **错误地使用了 `-l` 参数的格式**。 比如你可能写了这样的命令: ```bash gcc main.c -add -o program ``` 你以为这是在链接 `libadd.so` 或 `libadd.a`,但实际上: - `gcc` 把 `-add` 当作一个**编译选项(command-line option)** - 它寻找名为 `add` 的内置选项(如 `-O2`, `-Wall` 等) - 找不到 → 报错:`unrecognized command-line option '-add'` --- ## ✅ 正确做法:使用 `-l` 指定库名 如果你想链接一个叫 `libmathutils.a` 或 `libmathutils.so` 的库,必须这样写: ```bash gcc main.c -lmathutils -L. -o program ``` ### 参数含义: | 参数 | 含义 | |------|------| | `-lmathutils` | 链接 `libmathutils.so` 或 `libmathutils.a`(注意:省略 `lib` 前缀和 `.so/.a` 后缀) | | `-L.` | 告诉链接器在当前目录查找库文件 | > ⚠️ 特别注意:是 `-l`(小写字母 L),不是 `-` 单独加函数名! --- ## 🧪 示例对比:错误 vs 正确 ### ❌ 错误写法(导致你的报错) ```bash gcc main.c -add -o program gcc main.c -multiply -o program gcc main.c -libmathutils -o program # 多写了 lib ``` 输出: ``` gcc: error: unrecognized command-line option-add’ ``` ### ✅ 正确写法 ```bash # 假设你有 libmathutils.a 或 libmathutils.so gcc main.c -lmathutils -L. -o program ``` 或者更明确地直接引用库文件(推荐初学者使用): ```bash gcc main.c ./libmathutils.a -o program ``` 这种方式不会出错,因为你直接告诉编译器:“就用这个 `.a` 文件”。 --- ## 🔍 如何验证库是否存在? 确保当前目录下有: - `libmathutils.a`(静态库)或 - `libmathutils.so`(动态库) 可以用以下命令查看: ```bash ls -l libmathutils.* ``` 如果没有,你需要先生成它: ```bash gcc -c mathutils.c -o mathutils.o ar rcs libmathutils.a mathutils.o # 生成静态库 # 或者 gcc -fPIC -shared -o libmathutils.so mathutils.c # 生成动态库 ``` --- ## 💡 小技巧:调试链接问题 ### 1. 查看链接器搜索了哪些库路径 ```bash gcc main.c -lmathutils -L. -v -o program ``` 加上 `-v` 可以看到详细日志。 ### 2. 检查库中是否包含目标函数 ```bash nm libmathutils.a | grep add ``` 你应该看到: ``` mathutils.o: 0000000000000000 T add ``` 表示 `add` 函数已正确打包进库。 --- ## ✅ 总结 | 问题 | 解决方案 | |------|----------| | `unrecognized command-line option '-add'` | 不要直接写 `-add` | | 应该使用 `-l库名` 来链接库 | 写成 `-lmathutils` 而不是 `-add` | | 更安全的方式 | 直接写 `./libmathutils.a` | ✅ 正确命令示例: ```bash gcc main.c ./libmathutils.a -o program ``` 或 ```bash gcc main.c -lmathutils -L. -o program ``` 运行即可成功! ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值