精华内容
下载资源
问答
  • 64位Linux操作系统制作的用于嵌入式Linux开发的工具链,在mini2440上测试过能运行该工具链编译过C/C++文件。
  • 树莓派的交叉编译工具链,适用于安装在x86的64位ubuntu系统上,用于编译arm平台树莓派上可运行的程序 文件名:gcc-linaro-arm-linux-gnueabihf-raspbian-x64.zip
  • google-perftools是一个堆外内存分析工具 默认libunwind安装到/usr/local/lib,使用prefix命令指定安装目录
  • 从零开始编译一个操作系统,在本书中详细的介绍了从零开始编译一个操作系统的完整过程和所有的软件包。一起试试吧。
  • 如何在64位Linux系统编译32程序

    千次阅读 2019-12-18 17:26:04
    64位的ubuntu,GCC8.2.0系统上,如何编译一个32的程序? 查找GCC文档可知,编译64位程序使用-m64选项,例如: gcc -m64 -O3 index.c -o index 编译32程序使用-m32选项,例如: gcc -m32 -O3 index.c -o index ...

    在64位的ubuntu,GCC8.2.0的系统上,如何编译一个32的程序?
    查找GCC文档可知,编译64位程序使用-m64选项,例如:

    gcc -m64 -O3 index.c -o index   //该程序只能在64位机器上运行
    

    编译32位程序使用-m32选项,例如:

    gcc -m32 -O3 index.c -o index   //该程序可以在32位或64位机器上运行
    

    但是如果编译32位系统报如下错误:

    /usr/bin/ld: skipping incompatible /home/zgl/gcc-8.2.0-exe/lib/gcc/x86_64-pc-linux-gnu/8.2.0/libgcc.a when searching for -lgcc
    /usr/bin/ld: cannot find -lgcc
    /usr/bin/ld: cannot find -lgcc_s
    collect2: error: ld returned 1 exit status
    

    此时可能有两个原因:第一是你安装GCC时../configure配置里面使用了--disable-multilib,导致没有安装系统库,第二个原因可能是你安装的gcc-multilib、g++-multilib库版本和你的gcc版本不匹配。

    尝试1:

    // 比如我gcc-8.2.0版本,使用如下命令安装multilib的话是安装的gcc-8.3.0版本
    // 有些情况是,安装完成之后,系统自带的gcc能使用-m32了,但是自己安装的gcc还是不能使用
    apt-get install gcc-multilib g++-multilib
    或者
    apt-get install gcc-8-multilib g++-8-multilib
    // 使用apt-get install gcc-8.2-multilib g++-8.2-multilib是不行的
    

    尝试2:
    修改usr/bin/gcc/usr/bin/ld,强制加入m32信息

    经过尝试了以上方式,我的问题依然没有解决,于是我删除了GCC-8.2.0重新安装让它支持multilib,安装命令如下:

    // 1.下载源码、解压
    wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-8.2.0/gcc-8.2.0.tar.gz
    wget http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/gmp-6.1.0.tar.bz2
    wget http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/mpc-1.0.3.tar.gz
    wget http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/mpfr-3.1.4.tar.bz2
    tar xzvf gcc-8.2.0.tar.gz
    tar -jxvf gmp-6.1.0.tar.bz2
    tar -xzvf mpc-1.0.3.tar.gz
    tar -jxvf mpfr-3.1.4.tar.bz2
    mv gmp-6.1.0 gcc-8.2.0/
    mv mpc-1.0.3 gcc-8.2.0/
    mv mpfr-3.1.4 gcc-8.2.0/
    cd gcc-8.2.0/
    // 2.建立软连接
    ln -s gmp-6.1.0/ gmp
    ln -s mpc-1.0.3/ mpc
    ln -s mpfr-3.1.4/ mpfr
    // 3.建立编译目录
    mkdir gcc-build
    cd gcc-build/
    // 4.配置configure  此时使用 --enable-multilib安装
    ../configure CFLAGS="-g3 -gdwarf-2 -O0" CXXFLAGS="-g3 -gdwarf-2 -O0" CFLAGS_FOR_TARGET="-g3  -gdwarf-2 -O0" CXXFLAGS_FOR_TARGET="-g3 -gdwarf-2 -O0" --enable-multilib --enable-languages=c,c++,fortran --prefix=/home/zgl/gcc-8.2.0-exe
    // 5.编译安装
    make -j 32
    make install
    

    安装完成之后我再source gcc,执行gcc -m32 -O3 index.c -o index便能成功了。

    References:

    展开全文
  • 提供源码编译后的hadoop 2.7.7的包,系统版本内核是Linux 3.10.0-957.el7.centos.plus.i686
  • 树莓派的交叉编译工具链,适用于安装在x86的32ubuntu系统上,用于编译arm平台树莓派上可运行的程序 文件名:gcc-linaro-arm-linux-gnueabihf-raspbian.zip
  • Linux操作系统编译构建指南.doc;Linux操作系统编译构建指南.doc;Linux操作系统编译构建指南.doc
  • linux 64位编译32及其64位动态库及其执行程序编译32/64位方法 文件夹下有如下程序: TcpClientStateOperate.h TcpClientStateOperate.cpp TcpClientInclude.h TcpClientControlOperate.h TcpClientControlOperate....

    linux 64位编译32位及其64位动态库及其执行程序编译32/64位方法

    文件夹下有如下程序:
    TcpClientStateOperate.h
    TcpClientStateOperate.cpp
    TcpClientInclude.h
    TcpClientControlOperate.h
    TcpClientControlOperate.cpp
    TcpClientCommon.h
    TcpClientCommon.cpp
    main.cpp

    1.#86_64为64位系统,默认gcc为64位的,会编译出64位的动态库
    g++ -o libharmorobotservice.so -fPIC -shared TcpClientCommon.cpp TcpClientControlOperate.cpp TcpClientStateOperate.cpp -I.
    2.#查看库是多少位
    file libharmorobotservice.so

    #-----------------------
    在64位系统,编译32位的动态库
    1.在64位机上编译32位的程序首先需要 ia32-libs 这个动态的支持,看一下 /usr/lib32 这个目录下有没有东西,如果没有, Ubuntu上安装这个包:
    sudo apt-get install ia32-libs ia32-libs-multiarch(如果在加入 -m32 这个参数时编译仍然有问题,比如

    2.这通常是由于没有32位的编译工具引起, 需要安装 gcc-multilib 这个软件包,在Ubuntu 上安装这个软件包:
    sudo apt-get install gcc-multilib
    g++ 也同样如此
    sudo apt-get install g+±multilib(如果下载失败,将dsn配置为114.114.114.114;8.8.8.8)
    3.编译32位的库
    g++ -o libharmorobotservice.so -fPIC -m32 -shared TcpClientCommon.cpp TcpClientControlOperate.cpp TcpClientStateOperate.cpp -I.
    4.#查看库是多少位
    file libharmorobotservice.so

    #------------------------
    1.编译64位可执行程序
    #g++ -o main mian.cpp -L. -lharmorobotservice(file main 查看可执行位数)

    2.编译32位可行性程序
    #g++ -m32 mian.cpp -L. -o main -lharmorobotservice

    #-------------------------
    运行可执行程序
    将编译的动态库加到LD_LIBRARY_PATH环境变量中

    展开全文
  • 64位Linux系统编译32汇编程序

    千次阅读 2015-07-18 17:17:35
    64位Linux系统编译32汇编程序的时候需要仿真32系统的需求,发现使用-m32参数后,编译提示错误,如下: /usr/bin/ld: 未知的仿真模式: 32 支持的仿真: elf_x86_64 elf32_x86_64 elf_i386 i386linux elf_l1om ...

    64位Linux系统编译32位汇编程序的时候需要仿真32位系统的需求,发现使用-m32参数后,编译提示错误,如下:

    /usr/bin/ld: 未知的仿真模式: 32
    支持的仿真: elf_x86_64 elf32_x86_64 elf_i386 i386linux elf_l1om elf_k1om i386pep i386pe
    collect2: error: ld returned 1 exit status

    首先要打开64位系统对32位的支持

    第一步:确认64为架构的内核

    dpkg --print-architecture
    
    输出:
    adm64


    说明已拥有64位架构内核。

    第二步:确认打开了多架构支持功能

    dpkg --print-foreign-architectures
    
    输出:
    i386

    说明已打开,如果没有需要手动打开

    打开多架构支持

    sudo dpkg --add-architecture i386
    sudo apt -get update
    sudo apt-get dist-upgrade
    如此这般你就拥有了64位系统对32位程序的支持

    其次是安装gcc multilab

     apt-get install gcc-multilib g++-multilib  


    展开全文
  • 64位Linux的ARM交叉编译器

    热门讨论 2013-08-22 15:25:08
    但自从装了Ubuntu 12.04 64位系统之后,原来在32位系统上可以使用的arm-linux交叉编译器不能用了。 按照网上的方法安装 sudo apt-get install ia32-libs 结果却提示依赖关系不能满足。 想从android代码里提取出64位...
  • 采用的版本是"libevent-1.4.13-stable.tar.gz", 源码压缩包...本文环境:vmware10虚拟机 centos6.5 64位和32,主要是64位操作 1、解压安装包  注意:请不要讲压缩包放在共享目录中来执行安装操作,放到linux自己

    采用的版本是"libevent-1.4.13-stable.tar.gz", 源码压缩包可以在官方网站上下载

    http://libevent.org/

    目前比较新的是2.x的版本,英文doc也可以下载。

    本文环境:vmware10虚拟机  centos6.5 64位和32位,主要是64位操作

    1、解压安装包

        注意:请不要讲压缩包放在共享目录中来执行安装操作,放到linux自己的文件夹下,比如/home/xxx

    tar -zxvf libevent-1.4.13-stable.tar.gz 解压后得到目录libevent-1.4.13-stable

    文件列表如图

         “图片呗csdn吃了”

        啰嗦一句,初学者会发现里面没有makefile文件,只有makefile.in和makefile.am,实际是通过运行configure脚本来生成makefile文件,这个编译选项是可配置的。configure等几个脚本自动判断操作系统的环境,包括cpu类型、操作系统等信息,生成匹配的makefile文件。脚本写的很强大很复杂,核心脚本configure大概2万多行。

    2、编译安装

        配置方法网上有一堆,但基本上没有怎么区分32位和64位的介绍

    网上的方法是

    #./configure   --prefix=/usr

    #make

    #make install

    OK,完成

        我是在64位机上操作,执行完后,没有太关注过程,相关库放到了/usr/lib目录下,且没有生成link文件,执行ldconfig也报错,具体原因分析后面补充。

        我们知道64位的linux系统的动态库是分lib和lib64的,其中lib中放置的是32位库,这个可以通过file  xx/lib/xxx.so查看得到信息,如下图所示为32位动态库

        

        插一句,如果64位机器想要编译或者运行32位程序,请安装glibc-devel.i686,注意版本,网上有些指导没有注意到32位和64位的区分,只说明安装glibc-devel,用yum search glibc可以得到如图所以,i686为32位,x86_64是64位机,devel为开发用版本,包含的东西要多些。

        

    有点扯远了,64位机我们希望将动态库安装到lib64目录下,我们可以执行

        #./configure --help  打开帮助页面,如下图我们可以找到libdir也是可以配置的

        

         

    那么我们就可以设置

        #./confure--libdir=/usr/local/lib64,执行完毕后可以看到create 一些makefile文件

        “图片被CSDN吃了”

        打开makefile文件,可以看到我们修改的参数libdir已经生效

             “图片被CSDN吃了”

         继续执行编译和安装命令

          #make && make install

          

          执行完毕后,可以查看到libevent相关的动态和静态库安装到了/usr/local/lib64目录下,头文件

          “图片被CSDN吃了”

           如果安装路径不合适需要,重新安装,请确保makefile没有改动的前提下,执行#make uninstall,操作,可以看到删除了头文件和库文件、和一些帮助文件

           “图片被CSDN吃了”


           回过头来解决ldconfig报错的问题,之前的错误make install后,报错

           

           原因是我把libevent安装文件放在共享目录下,共享目录下是win格式下的文件系统,linux无法做链接文件操作,所以创建链接失败,进入到lib64下可以到所有libevent的so文件都不是link。解决方法,将安装文件放到linux系统自己的目录下,如/home/xxx。更换目录无错误了,且lib64目录下的动态库也是链接形式存在

        

          

           另外还有就是在arm平台下编译(安装)libevent,这个网上有很多资料,抽空也试试看,走一遍看看是否有坑。

    展开全文
  • 64位linux编译32程序

    千次阅读 2016-01-04 13:57:06
    一般情况下我们最好是在一个平台上编译本平台的二进制程序,比如在32平台上编译32程序而在64位平台上编译64位程序。  现在64位系统(这里主要指x86_64系统,包括AMD64和Intel的EM64T)已经开始广泛的...
  • 使用win10 linux系统执行32交叉编译工具链时提示Exec format error,如下图所示: 2. 解决办法 由于子系统64位系统,按照常规ubuntu64位系统运行32程序方法,添加 32bit 运行环境: ...
  • 64位系统安装32运行库和编译
  • [图片说明](https://img-ask.csdn.net/upload/201709/20/1505874183_591076.jpg)32的C++程序在windows下32和64 都正常,在Linux32下也是正常的,但在64位Linux下程序 core dumped(段错误),求大手帮忙瞅瞅
  • 编译最小linux系统

    千次阅读 2017-09-21 23:48:13
    五,linux系统引导过程简介 ,编译内核 七,编译busybox 八,制作根文件系统 九,制作ramdisk映象文件 十,内核与busybox的整合 十一,安装测试和内容调整 十二,babylinux中的BUG 十三,接下来要做的事情 十四,...
  • 内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络...源码编译Linux内核 使用Linux内核模块 实战:编译一个NTFS内核模块,实现Linux挂载NTFS文件系统并实现读写功能 一、 源码编
  • setarch i386 ./config -m32 可以参考这个网页:http://stackoverflow.com/questions/7835596/how-do-i-compile-openssl-in-32-bit-mode-on-a-64bit-system
  • win10子系统linux下cmake编译32程序

    千次阅读 2019-06-09 16:45:47
    对于win10系统linux的安装这里不再介绍,这里只介绍子系统环境下的cmake编译32程序,这里的linux为Ubuntu 18.04.2 LTS 64位系统信息可以通过如下命令查看: cat /etc/issue uname -a 配置软件源 apt安装软件...
  • 如何编译和更换Linux系统内核

    万次阅读 2018-09-11 11:00:29
    step0 — 完成编译和安装Linux需要的基本条件 内核源代码 从http://www.kernel.org即可下载代码,注意你需要下载的是完整的源代码包(点击tarball即可下载),而不是patch或change log之类。 编译需要的软件 ...
  • gcc for Linux 3264位

    2015-09-15 17:35:11
    附件的方法可以对应解决你的gcc依赖包问题,适应各种版本的Linux系统,也不区分64位还是32均可找到你要的包 请按照如下方法更便捷自动安装gcc,无需四处搜集适合你系统的10几个依赖包,基本无需手动下载。
  • 64位Linux系统中,如果不加设置,直接编译出来的软件是64位的,如果需要编译32版本可以这么做:./configure --prefix=../ --extra-cflags="-m32" --extra-ldflags="-m32" make make install
  • 大家看到这个不要好奇,我也是在分析结构体大小时想到的,我们大家都知道在windows底下,我们想编译一个c程序(用64位和32分别编译,特别不方便),除非是双系统,或者虚拟机,但是装这些有时候挺麻烦的,但是但是...
  • 主要介绍了linux如何编译安装新内核支持NTFS文件系统(以redhat7.2x64为例),具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
  • 交叉编译 使用别人做好的交叉编译工具 准备工作: 安装ubuntu(我是虚拟机),写一个helloword,并gcc成可执行程序运行成功 确认你的目标机类型,一定要别弄错了,我的架构是armv8 aarch64,怎么确认的?我问同学的...
  • linux64位操作系统编译通过最新版wireshark3.0.1源码,保证编译绝对通过!
  • Windows 下编译Linux 64位可执行程序 set GOARCH=amd64 set GOOS=linux go build windows下运行set GOARCH=amd64 set GOOS=windows 在CMD窗口执行,不要在Git Bash来执行命令
  • linux 64位系统下so编译

    千次阅读 2014-03-26 19:16:23
    阿里云这坑爹的玩意,不再对32为系统支持,没办法,我们只能将我们的程序移植到64位下。 我编译一个so文件这个文件应用了几个第三方静态库,当然,第三方已经为我们提供了64位的静态库,编译动态库需要使用-fPIC...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 643,239
精华内容 257,295
关键字:

如何编译64位linux系统

linux 订阅