zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    Java 学习笔记之 线程interrupted方法
    Java 学习笔记之 线程interrupt方法
    定义函数
    调用函数
    pass语句
    循环
    条件语句
    别样赋值
    import语句
    字典方法
  • 原文地址:https://www.cnblogs.com/weir007/p/5977759.html
Copyright © 2011-2022 走看看