• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

土鳖不土,战斗力五

天地玄宗,万炁本根。广修万劫,证吾神通。
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

64位linux编译32位程序

  昨天接到的任务,编译64位和32位两个版本的.so动态库给其他部门,我的ubuntu虚拟机是64位的,编译32位时遇到了问题:

  /usr/bin/ld: cannot find -lstdc++

  最后在stackoverflow上看到了解决方案(安装multilib,我的源程序既有c又有cpp,所以只好gcc和g++都装了):

  sudo apt-get install gcc-multilib

  sudo apt-get install g++-multilib

  然后再 gcc -I./include *.c *.cpp -m32 -fPIC -shared -o xxxx.so -lstdc++ 

  需要注意的是,若在程序中引用32位库,则该程序也必须编译成32位可执行文件:

  g++ -o testso -m32 -fPIC test.c -L -lxxxx -ldl(根据.so情况不同,这里也可以是gcc,注意-fPIC不会出错)

  因为我的test.c中调用了刚才生成的动态库 xxxx.so,所以加了-ldl

 

  另,在CentOS下,安装g**multilib就需要不同的命令了,安装的包也跟系统版本有关,可以先运行lsb_release -a查看一下自己的版本,然后运行:

  CentOS/RHEL 5.x

 

yum -y install glibc-devel.i386 libstdc++-devel.i386

 

 

 

  CentOS/RHEL 6.x

  

yum -y install glibc-devel.i686 libstdc++-devel.i686

 

 

  

 

posted on 2016-10-19 16:25  土鳖不土,战斗力五  阅读(794)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3