64位的Ubuntu系统上使用汇编nasm和C语言

$ nasm -f elf foo.asm -o foo.o
$ gcc -c bar.c -o bar.o
$ ld -s  foo.o bar.o -o foobar

  ld: i386 architecture of input file `foo.o‘ is incompatible with i386:x86-64 output

意思是nasm 编译产生的是32位的目标代码,gcc 在64位平台上默认产生的是64位的目标代码,

这两者在链接的时候出错,gcc在64位平台上默认以64位的方式链接。

-------------------------------------------------------------------------------------------------------

方法:

让gcc 产生32位的代码,并在链接的时候以32位的方式进行链接

在这种情况下只需要修改编译和链接指令即可,具体如下:

32位的编译链接指令

$ nasm -f elf foo.asm  -o  foo.o

$ gcc -m32 -c bar.c -o bar.o

$ ld -m elf_i386 -s foo.o bar.o -o foobar

$ ./foobar
  the 2nd one

参考地址:http://www.linuxidc.com/Linux/2012-12/75804.htm

时间: 2024-10-05 20:26:13

64位的Ubuntu系统上使用汇编nasm和C语言的相关文章

阿里云64位centos6.3系统上编译安装redis

环境 系统:阿里云64位centos 6.3 [[email protected]~]$ cat /etc/issue CentOS release 6.3 (Final) Kernel \r on an \m [[email protected]~]$ uname -a Linux AY1404062027584053a1Z 2.6.32-358.6.2.el6.x86_64 #1 SMP Thu May 16 20:59:36 UTC 2013 x86_64 x86_64 x86_64 GN

64位win2003/win2008系统IIS6.0/7.5配置PHP的方法

64位win2003/win2008系统IIS6.0/7.5配置PHP的方法 32位的win2003系统配置PHP,估计很多人都已经驾轻就熟了,不过当遇到64位的系统时,估计又会遇上新的问题了.本文记录了我在64位win2003/win2008系统IIS6.0/7.5配置PHP的方法,第一次配置的人可以参考参考. 64位win2008系统IIS7.5配置PHP环境 用惯IIS6.0的人,对IIS7.5的界面尤为陌生,操作习惯也大不一样,不过这都很容易就上手,就如第一次操作IIS6.0一样. 64

64位win8.1系统 运行 32位程序,文件夹路径是中文遇到问题

今天有一位用户向我反应软件使用遇到问题. 用户使用的是64位win8.1系统,之前有很多用户使用64位的win8.1系统没遇到过问题. 远程协助了一下,差不多15分钟我试了几个办法没解决问题. 最后我把程序放在一个[abc]文件夹中,测试发现一切正常了. 我又把程序放在一个[汉字]文件夹中,测试又不行了. 看来软件所在的文件夹中不能含有中文,可为什么在别的用户64位的win8.1系统上又可以放在中文的文件夹中正常使用呢? 如果是所有的64位win8.1都有这样的问题还好办,可是仅个别存在这样的问

如何判断系统是32位还是64位的linux系统

如何判断系统是32位还是64位的linux系统 某日,需要下载个安装包,忽然忘记了自己的系统是32位还是64位的系统了,一时想不起来怎么查看时32位还是64位,呵呵,随便百度下,就发现有好多方法,这里记录下,方便日后查询: 第一种: 12345 [root@CentOS62 ~]# uname -mi686 [root@436704 ~]# uname -mx86_64 第二种: 12345 [root@CentOS62 ~]# file /sbin/init/sbin/init: ELF 32

Linux判断CPU是32位还是64位,判断系统是32位还是64位

from:http://www.ipcpu.com/2010/08/linux-cpu-32-64/ 本文仅限于服务器CPU和Linux系统讨论,与台式电脑.笔记本无关. 32位.64位不能乱装,64的能装32位的,因为64位的CPU可以兼容32位,32位的装不了64位的.最近部署了MongoDB,系统是32位的提示会有最大文件2G的限制.还有最常见的问题32位系统不支持4G以上内存,即使打PAE效率也受影响. 1.判断CPU是32位还是64位 这个问题比较有意思,网上给出的办法都是判断了系统的

在Ubuntu系统上搭建Hadoop 2.x(2.6.2)

官方的中文版的Hadoop快速入门教程已经是很老的版本了,新版的Hadoop目录结构发生了变化,因此一些配置文件的位置也略微调整了,例如新版的hadoop中找不到快速入门中提到的conf目录,另外,网上有很多教程也是关于老版本的.本教程主要是针对Hadoop 2.X版本,在Ubuntu系统上的搭建过程.如果要对各个步骤进行深入理解,还需要参考其他资料. 英文版快速入门:http://hadoop.apache.org/docs/r2.6.2/hadoop-project-dist/hadoop-

64位win8.1系统 安装plsql (转)

原文出处:http://blog.csdn.net/edward_qing_lee/article/details/25970185 64位win8.1系统 安装plsql 参考:http://www.cnblogs.com/chuyuhuashi/archive/2012/03/22/2411481.html 1.下载32位Oracle客户端 http://download.oracle.com/otn/nt/instantclient/112030/instantclient- basic-

Ubuntu系统上SVN服务器的安装和配置

Ubuntu系统上SVN的安装和配置 1.安装 #sudo apt-get install subversion 2.创建版本库 #sudo mkdir /home/svn #sudo svnadmin create /home/svn/suc 3.进入版本库修改相关配置文件 #cd /home/svn/suc/ #dir conf db format hooks locks README.txt 我们主要关心的是conf和db文件,conf文件夹下是存放主配置文件和用户.权限位置,db文件夹是

Nginx: ubuntu系统上如何判断是否安装了Nginx?

问题描述:ubuntu系统上,如何查看是否安装了Nginx? 解决方法:输入命令行:ps -ef | grep nginx master process后面就是Nginx的安装目录. 延伸:1. 如何查看Nginx版本号? 使用命令:nginx -v   //显示Nginx版本号 nginx -V  // 显示Nginx版本号,编译器版本号,配置信息 2. master process:主进程 worker process:工作进程 参考:https://zhidao.baidu.com/que