首页 > 系统相关 >【Linux】Linux64位环境下编译32位报错的解决办法

【Linux】Linux64位环境下编译32位报错的解决办法

时间:2024-08-31 13:24:21浏览次数:13  
标签:test1 bin ld 32 c++ lstd Linux64 报错 usr


问题

如题,当我尝试在wsl2的ubuntu中使用-m32选项编译32位程序的时候,出现了下面的两种报错

❯ g++ -m32 test.cpp -o test1 && ./test1
In file included from test.cpp:1:
/usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file or directory
   27 | #include <bits/libc-header-start.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
❯ g++ -m32 test.cpp -o test1 && ./test1
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/11/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/11/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++: No such file or directory
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/11/libstdc++.so when searching for -lstdc++
collect2: error: ld returned 1 exit status

解决

原因是当前缺少32位的开发库,需要安装

sudo apt install gcc-multilib g++-multilib libc6-dev-i386 -y

安装后重试,编译成功。

❯ g++ -m32  test.cpp -o test1 && ./test1
4

代码很简单,是一个打印指针大小的代码,在32位下指针大小是4,64位下指针大小是8;

#include <stdio.h>

int main()
{
    void * ptr= nullptr;
    printf("%d\n",sizeof(ptr));
    return 0;
}

更多说明

在linux下可以使用下面的命令查看你的系统位数。

❯ getconf LONG_BIT
64

参考文章:assembly - /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/9/libstdc++.a when searching for -lstdc++ /usr/bin/ld: cannot find -lstdc++ - Stack Overflow


标签:test1,bin,ld,32,c++,lstd,Linux64,报错,usr
From: https://blog.51cto.com/musnow/11882764

相关文章

  • 内存管理-32-系统内存统计-4-/proc/vmstat
    基于msm-5.4一、打印内容1.打印格式#cat/proc/vmstat/*1.打印全局数组vm_zone_stat[]的值,enumzone_stat_item描述各条目*/nr_free_pages617775nr_zone_inactive_anon16518nr_zone_active_anon979541nr_zone_inactive_file698879nr_zone_active_file17223......
  • 一个操作系统的设计与实现——第19章 IA32-e模式
    19.164位段描述符与GDT在32位操作系统中,我们使用的是平坦模型而非分段模型,从而,段描述符的段基址和段限长均成了摆设。在64位模式下,就连CPU也淘汰了分段模型,转而固定使用平坦模型。64位代码段描述符如下图所示:如图所示,由于固定使用平坦模型,段描述符中的段基址、段限长、粒度等......
  • 【ESP32-S3】基于正点原子ESP32-S3M开发(二)--Arduino环境搭建
    Arduino开发环境搭建使用Arduino开发难度低,开发效率高,但运行效率低,编译时间长,适合电子爱好者等非专业人士使用正点原子官方资料下载地址提取码:ixmr安装Arduino到资料盘A>6,软件资料>1,软件>3,Arudino开发工具下找到安装包并安装设置中文请添加图片描述安装库......
  • antd vue switch组件怎么把值true、false改为uint32类型的1和0
    背景已知switch组件的checked属性默认是传入true和false的,但是有这样的业务情景,既需要使用的是开关,又需要传入的是整数,那么我们应该如何修改呢?解决方案<a-form-itemlabel="允许失败时保存"><a-switch:checked="switchValue===1"@change="handleSwitchChan......
  • .NET 8 Moq mock GetRequiredKeyedService Setup报错yk
    .NET8MoqmockGetRequiredKeyedServiceSetup报错项目代码里有地方用到IServiceProvider.GetRequiredKeyedService来解析服务,在写单元测试时需要Mock它,本以为像下面这样写就可以了:||varserviceProvider=newMock<IServiceProvider>();||---|---|||serviceP......
  • .NET 8 Moq mock GetRequiredKeyedService Setup报错Hz
    .NET8MoqmockGetRequiredKeyedServiceSetup报错项目代码里有地方用到IServiceProvider.GetRequiredKeyedService来解析服务,在写单元测试时需要Mock它,本以为像下面这样写就可以了:||varserviceProvider=newMock<IServiceProvider>();||---|---|||serviceP......
  • PY32F002A单片机开发板 PY32F002AF15P6开发板 32位MCU,M0+内核
    PY32F002A开发板上搭载的是PY32F002AF15P6单片机,TSSOP20封装,开发板使用TypeC接口供电,可以用来对PY32F002A芯片进行开发调试。PY32F002A开发板推荐使用我们的PY32link来下载仿真,绝大部分的STlink,Jlink,DAPlink也可以下载仿真,需自行测试。开发资料齐全,提供了LL库和HAL库,支持IAR......
  • g++链接报错:undefined reference to typeinfo of xxx
    g++链接报错:undefinedreferencetotypeinfoofxxx问题背景在项目中遇到了这样一个问题:C++文件编译都OK,但链接的时候报错:undefinedreferencetotypeinfoforxxx。std::typeinfo是C++中的RTTI(RunTimeTypeIdentification)机制中记录类型信息用的,dynamic_cast和typeid......
  • 最全!嵌入式STM32单片机开发环境配置教学Win/Mac!!!DA
    合集-环境配置(1)1.最全!嵌入式STM32单片机开发环境配置教学Win/Mac!!!08-28收起嵌入式STM32单片机开发环境配置教学Win/Mac·本教程支持Windows和Mac·Windows可选的开发软件为Keil、Clion、STM32CubeMX,可自由选择开发方式·Mac的开发环境为(Clion+OpenOCD+STM32CubeMX),仅支......
  • ModuleNotFoundError: No module named ‘utils.query‘ flask项目遇到这种报错怎么解
    ModuleNotFoundError:Nomodulenamed'utils.query'这个错误表明你的Python代码正在尝试导入一个名为utils.query的模块,但未能成功找到它。以下是解决该问题的几个步骤:1.检查模块路径如果utils.query是你自己的模块或在项目中的某个目录下,确保文件路径正确。util......