首先,要安装GCC 4.8, 参考前文:Ubuntu 12.04 & 13.04 安装 GCC4.8.1

其中,重点是安装multilib

apt-get install gcc-4.8-multilib  

接着前文premake管理一个solution和多个project的目录树做一些修改:

1.创建四个configuration,分别为Debu64, Release64, Debug32和Release32, 把它们放在solution下面,这样,每个proejct都共享这些设置。

-- A solution contains projects, and defines the available configurations
solution ("solution2")
configurations {"Debug64", "Release64", "Debug32", "Release32"}
location "build"
targetdir "output" configuration "Debug64"
defines { "DEBUG" }
flags { "Symbols" } configuration "Release64"
defines { "NDEBUG" }
flags { "Optimize" } configuration "Debug32"
linkoptions {"-m32"}
defines { "DEBUG -m32" }
flags { "Symbols" } configuration "Release32"
linkoptions {"-m32"}
defines { "NDEBUG, -m32" }
flags { "Optimize" }

2. 注意上面的32位的配置,添加了linkoptions,并且在defines里面添加了-m32, 这里很别扭。因为-m 在gcc中叫做machine options参数,而premake中没有对应的,只能用defines函数添加。下面这个方式很不好,虽然work.

defines {"DEBUG -m32"}

3. 编译并检查

然后开始运行命令:

/solution2$ premake4 --file=config.lua gmake
Building configurations...
Running action 'gmake'...
Generating build/Makefile...
Generating build/hello1/Makefile...
Generating build/hello2/Makefile...
Done.

进入build目录,开始编译

 cd build/
CHN\shu6889@sloop2:~/work/gitlab/raster/codes/study/premake/solution2/build$ make config=debug32
==== Building hello1 (debug32) ====
Creating ../../output
Creating obj/Debug32
main.cpp
Linking hello1
==== Building hello2 (debug32) ====
Creating obj/Debug32
main.cpp
Linking hello2

现在检查output目录中的两个binary,看看是不是32位。

solution2/build$ cd ../output/
CHN\shu6889@sloop2:~/work/gitlab/raster/codes/study/premake/solution2/output$ file hello1
hello1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x21747ca29b73061ed5ff3d122c8b2318941bce5d, not stripped
CHN\shu6889@sloop2:~/work/gitlab/raster/codes/study/premake/solution2/output$ file hello2
hello2: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x975e62f065dc80f22aaa22da30b4f65d4a8b2db8, not stripped

编译成功。

4. 现在用clang试一下,添加环境变量:

export CXX=clang++
export CC=clang

重复第3步,成功。

premake 在64位Ubuntu系统下编译32位GCC程序的更多相关文章

  1. 在64位Ubuntu系统上安装32位程序包

    在64位Ubuntu系统上安装32位的程序包 $sudo apt-get install package_name:i386 例如: $sudo apt-get install openjdk-7-j ...

  2. 64位Ubuntu系统下ROP攻击

    64位Ubuntu系统下ROP攻击 基础知识 ROP攻击 ROP全称为Retrun-oriented Programmming(面向返回的编程)是一种新型的基于代码复用技术的攻击,攻击者从已有的库或可 ...

  3. 64位系统下注册32位dll文件

    64位系统下注册32位dll文件 在64位系统里注册32位软件所需的一些dll会提示不兼容,大概因为32 位进程不能加载64位Dll,64位进程也不可以加载32的导致. 若要支持的32 位和64 位C ...

  4. 64位系统下注册32位dll、ax文件

    64位系统下注册32位dll.ax文件. 换了64位系统遇到的新问题,目前常用的影音处理软件多数为32位. 注册这些32的滤镜会提示不兼容,大概因为32 位进程不能加载64位Dll,64位进程也不可以 ...

  5. 在64位linux下编译32位程序

    在64位linux下编译32位程序 http://blog.csdn.net/xsckernel/article/details/38045783

  6. win10 64位专业版系统中显示32位dcom组件配置的方法

    word.excel是32位的组件,当用户64位系统在运行窗口中输入dcomcnfg命令时,在打开的组件服务管理窗口,是找不到Microsoft Excel.word程序的.另外,Windows 环境 ...

  7. WinDbg 在64位系统下转储32位进程

    在64位系统下,首先要判断进程是32位,还是64位 在Win8之前,进程名后带星号(*)则是32位进程.但Win8.1后,则不显示星号.需要选出“平台”列,来确认32位,还是64位. 在64位系统下的 ...

  8. pyinstaller在64位系统下打包32位程序

    使用环境说明:win10 64位,已安装python3.6-64位版本 遇到的问题:win10 64位打包成exe文件后,不能在32位系统运行 需求:使用python打包生成exe文件,win64位和 ...

  9. 64位操作系统下调用32位com的问题

    Hello Guys! I am trying to create a simple VBS script to automatically open some .tif images from a ...

随机推荐

  1. two sets of Qt binaries into the same process的解决办法

    突然出现了这样问题,吓死我,然后只是把原来编译好的app里面所有的东西删除再编译就好了. 如果删除后不行,可以试试后面的截图所说,反正我是没有试过的 Starting /Qtwork/build-te ...

  2. 分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要)

    原文:分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要) Java InputStream读取数据问题 ======== ...

  3. SFTP上传下载(C#)

    sftp是ftp协议的升级版本,是牺牲上传速度为代价,换取安全性能,本人开始尝试使用Tamir.SharpSSH.dll但它对新版本的openssh 不支持,所有采用Ssh.Net方式 需要依赖:Re ...

  4. JAVA类(上)

    package test; public class staticAccess { public int age; public staticAccess grow() { age++; return ...

  5. hdu 4940 Destroy Transportation system( 无源汇上下界网络流的可行流推断 )

    题意:有n个点和m条有向边构成的网络.每条边有两个花费: d:毁坏这条边的花费 b:重建一条双向边的花费 寻找这样两个点集,使得点集s到点集t满足 毁坏全部S到T的路径的费用和 > 毁坏全部T到 ...

  6. QT之深入理解QThread

    QT之深入理解QThread       理解QThread之前需要了解下QThread类,QThread拥有的资源如下(摘录于QT 5.1 帮助文档):       在以上资源中,本文重点关注槽:s ...

  7. Canvas上绘制几何图形

    重要的类自定义View组件要重写View组件的onDraw(Canvase)方法,接下来是在该 Canvas上绘制大量的几何图形,点.直线.弧.圆.椭圆.文字.矩形.多边形.曲线.圆角矩形,等各种形状 ...

  8. 几种经典的数据排序及其Java实现

    选择排序 思想 n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果: ①初始状态:无序区为R[1..n],有序区为空. ②第1趟排序 在无序区R[1..n]中选出关键字最小的记录R[k ...

  9. 中国还是和AMD走到一起了 但美国会高兴吗(网易科技 卢鑫)

    文/ 网易科技 卢鑫 去年的这个时候,小编写下了一篇<易评:还给AMD一个公正!>——此文由AMD惨不忍睹的第一季度财报展开,谈到了该公司将全部资源押宝2016的现实.如今,2016第一季 ...

  10. 用Delphi实现Windows的鼠标钩子函数

    Delphi是基于PASCAL语言的Windows编程工具,功能十分强大.然而在Delphi的帮助文件中,对Windows API函数的说明沿袭了 VC 的格式,和VC一样,对很多API函数的用法没有 ...