最近操作系统课要求用 C/C++ 和 NASM 编写一个 FAT12 读取工具,需要通过 C/C++ 调用在 NASM 文件中定义的函数,且要编译成 32 位。在此介绍 编译 相关的配置,希望能够帮到大家~

环境:Ubuntu 16 64 位

首先安装 NASM

sudo apt-get install nasm

1. 编译链接 .c 和 .asm

安装 gcc 的 32 位库

sudo apt-get install gcc-multilib

编写 main.c 和 func.asm

// main.c
#include <stdio.h>void myPrint(char* msg, int len);int main() {char msg[2] = { 'O', 'S' };myPrint(msg, 2);
}
; func.asm
section .text
global myPrint
myPrint:mov    edx, [esp+8]mov    ecx, [esp+4]mov    ebx, 1mov    eax, 4int    80hret

编写完毕后打开终端(命令行),首先编译 func.asm,然后编译并链接 main.c 与 func.o,最后执行

nasm -f elf32 func.asm
gcc -m32 main.c func.o -o tool.bin
./tool.bin

2. 编译链接 .cpp 和 .asm

NASM 文件编译同上,代码不需要更改,生成 func.o 文件

安装编译 .cpp 所需的依赖

sudo apt-get install build-essential g++ g++-multilib

编写 main.cpp

// main.cpp
#include <iostream>extern "C" void myPrint(const char* msg, int len);  // 重要!int main() {string msg = "Hello OS";myPrint(msg.c_str(), 8);
}

注意!这里一定要在申明函数之前加上 extern "C"!

在 .c 中,我们不需要加上 extern,编译器发现我们只是声明了函数但未定义时会主动帮我们加上 extern,但在 .cpp 中则不会!

这些完成之后,我们就可以链接刚才编译好的 func.o 来生成可执行文件了~

g++ -m32 main.cpp func.o -o tool.bin
./tool.bin

希望能够帮大家少走一些弯路~

【操作系统】Ubuntu 16 编译链接 .cpp 和 .asm 文件相关推荐

  1. UBUNTU ROS 编译后无法rosrun package文件(已解决)

    UBUNTU ROS 编译后无法rosrun package文件(已解决) 很多原因是tab不到那个package,所以要在bashrc文件中输入文件路径 解决方法 ,打开终端 输入: gedit . ...

  2. 树莓派Ubuntu 16.04 MATA系统 修改用户文件夹名后,提示configure it with blueman-service...

    自从修改了树莓派的Ubuntu 16.04 MATA 系统的 /home/ 下的用户文件夹名后,使用vncserver远程操作,看到桌面每次都提示 Configured directory for i ...

  3. linux 压缩文件夹rar,让Ubuntu 16.04可以压缩/解压缩RAR文件

    在Ubuntu 16.04下经常要用到压缩/解压缩RAR文件, 每次都是网上搜索教程,而且都没有详细解析每个命令的具体用法,现在详细记下方法,以备再次用的时候方便的找到. 因为 参数 e 和 x 经常 ...

  4. Linux使用ftp传输10g的文件,Ubuntu 16.04 安装ftp服务器传输文件

    最近在搞深度学习,老师比较宝贝他的服务器,要求我以后负责管理服务器.往后所有要使用服务器的人都必须向我申请账号,然后只允许客户端访问,使用文件传输软件传输文件.像我这样一个Linux菜逼,这种要求不是 ...

  5. Ubuntu 16.04 ,压缩/解压缩RAR文件

    以下记录是来自于网络,如果有侵权,立马删掉 Ubuntu刚安装的时候是不能解压rar文件的,只有在安装了解压工具之后,才可以解压. 安装:sudo apt-get install unrar 卸载:s ...

  6. 非uefi模式安装linux,UEFI启动模式下安装Ubuntu 16.04教程

    前言 最近常帮人安装Ubuntu,也算积累了一些经验.这篇博文主要谈一谈如何在UEFI启动模式下正确安装Ubuntu 16.04,以形成Windows 10和Ubuntu 16.04的双系统. 随着U ...

  7. ubuntu 16.04下安装pytorch配置caffe2(cuda 9.0+cudnn 7.6)

    caffe2已经合并进啦pytorch里面,所以我们可以通过安装pytorch完成对caffe2的配置,相较于安装caffe2源码的方式,操作上更为简单. 操作系统: Ubuntu 16.04.5 L ...

  8. UEFI启动模式下安装Ubuntu 16.04教程

    前言 最近常帮人安装Ubuntu,也算积累了一些经验.这篇博文主要谈一谈如何在UEFI启动模式下正确安装Ubuntu 16.04,以形成Windows 10和Ubuntu 16.04的双系统. 随着U ...

  9. ubuntu linux 163源,Ubuntu 16.04 163网易源设置(自动化配置脚本)

    1.简介 1.1 介绍 很多时候,为了方便 操作,条件允许的情况下,直接 联网 进行安装,但是 系统 所配置的 apt源 配置的 url 地址 并非 国内的,获取资源很慢,所以 需要 配置成 国内的 ...

  10. Ubuntu 16.04 - 64bit 解压 rar 报错 Parsing Filters not supported

    Ubuntu 16.04 - 64bit  解压rar 文件报错: 错误如下图: 原因: 未安装解压命令 unrar 参考博客: Error - "Parsing Filters not s ...

最新文章

  1. 在C#中用COM操作CAD
  2. C++类class和结构体struct区别
  3. win10安装ensp启动40_acer e5-475g笔记本如何安装win10系统【图文教程】
  4. 状态机思路在程序设计中的应用
  5. http三次握手四次挥手详解
  6. AngualrJS之服务器端通信
  7. 1.7编程基础之字符串 06 合法 C 标识符 python
  8. Ubuntu 多版本Cuda(8.0,9.0)以及CuDnn安装
  9. DBUtils——handler
  10. 六、openstack安装之Horizon篇
  11. html网站页面上字体改变,如何设置网页字体样式
  12. 用Python画一个时钟---简易版
  13. MFC显示bmp图像
  14. T6 v6.2puls1 安装了最新补丁之后采购发票结算之后入库单价税合计有1分差额
  15. ArcGIS 图像合并至新栅格图层
  16. 压缩ppt文件大小的方法
  17. 【新征程】1、考研路漫漫
  18. 吃着火锅唱着歌学会Docker
  19. win7去除快捷方式小箭头
  20. setcpu_SetCPU中文版

热门文章

  1. 《自适应滤波器原理》西蒙.赫金 百度云
  2. 黑域助手连接服务器才能用吗,自己装黑域一定要用电脑设置了才能用吗
  3. 分布式服务框架选型:面对Dubbo,阿里巴巴为什么选择了HSF?
  4. jQuery视频格式的验证
  5. linux udhcpc指令,linux下udhcpc的使用
  6. 如何设置Idea字体颜色
  7. kali之iwconfig
  8. 详解 Python 字符串(一):字符串基础
  9. 搜狗双拼输入法--快速入门
  10. 阿里云短信验证码后端