【操作系统】Ubuntu 16 编译链接 .cpp 和 .asm 文件
最近操作系统课要求用 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 文件相关推荐
- UBUNTU ROS 编译后无法rosrun package文件(已解决)
UBUNTU ROS 编译后无法rosrun package文件(已解决) 很多原因是tab不到那个package,所以要在bashrc文件中输入文件路径 解决方法 ,打开终端 输入: gedit . ...
- 树莓派Ubuntu 16.04 MATA系统 修改用户文件夹名后,提示configure it with blueman-service...
自从修改了树莓派的Ubuntu 16.04 MATA 系统的 /home/ 下的用户文件夹名后,使用vncserver远程操作,看到桌面每次都提示 Configured directory for i ...
- linux 压缩文件夹rar,让Ubuntu 16.04可以压缩/解压缩RAR文件
在Ubuntu 16.04下经常要用到压缩/解压缩RAR文件, 每次都是网上搜索教程,而且都没有详细解析每个命令的具体用法,现在详细记下方法,以备再次用的时候方便的找到. 因为 参数 e 和 x 经常 ...
- Linux使用ftp传输10g的文件,Ubuntu 16.04 安装ftp服务器传输文件
最近在搞深度学习,老师比较宝贝他的服务器,要求我以后负责管理服务器.往后所有要使用服务器的人都必须向我申请账号,然后只允许客户端访问,使用文件传输软件传输文件.像我这样一个Linux菜逼,这种要求不是 ...
- Ubuntu 16.04 ,压缩/解压缩RAR文件
以下记录是来自于网络,如果有侵权,立马删掉 Ubuntu刚安装的时候是不能解压rar文件的,只有在安装了解压工具之后,才可以解压. 安装:sudo apt-get install unrar 卸载:s ...
- 非uefi模式安装linux,UEFI启动模式下安装Ubuntu 16.04教程
前言 最近常帮人安装Ubuntu,也算积累了一些经验.这篇博文主要谈一谈如何在UEFI启动模式下正确安装Ubuntu 16.04,以形成Windows 10和Ubuntu 16.04的双系统. 随着U ...
- ubuntu 16.04下安装pytorch配置caffe2(cuda 9.0+cudnn 7.6)
caffe2已经合并进啦pytorch里面,所以我们可以通过安装pytorch完成对caffe2的配置,相较于安装caffe2源码的方式,操作上更为简单. 操作系统: Ubuntu 16.04.5 L ...
- UEFI启动模式下安装Ubuntu 16.04教程
前言 最近常帮人安装Ubuntu,也算积累了一些经验.这篇博文主要谈一谈如何在UEFI启动模式下正确安装Ubuntu 16.04,以形成Windows 10和Ubuntu 16.04的双系统. 随着U ...
- ubuntu linux 163源,Ubuntu 16.04 163网易源设置(自动化配置脚本)
1.简介 1.1 介绍 很多时候,为了方便 操作,条件允许的情况下,直接 联网 进行安装,但是 系统 所配置的 apt源 配置的 url 地址 并非 国内的,获取资源很慢,所以 需要 配置成 国内的 ...
- Ubuntu 16.04 - 64bit 解压 rar 报错 Parsing Filters not supported
Ubuntu 16.04 - 64bit 解压rar 文件报错: 错误如下图: 原因: 未安装解压命令 unrar 参考博客: Error - "Parsing Filters not s ...
最新文章
- 在C#中用COM操作CAD
- C++类class和结构体struct区别
- win10安装ensp启动40_acer e5-475g笔记本如何安装win10系统【图文教程】
- 状态机思路在程序设计中的应用
- http三次握手四次挥手详解
- AngualrJS之服务器端通信
- 1.7编程基础之字符串 06 合法 C 标识符 python
- Ubuntu 多版本Cuda(8.0,9.0)以及CuDnn安装
- DBUtils——handler
- 六、openstack安装之Horizon篇
- html网站页面上字体改变,如何设置网页字体样式
- 用Python画一个时钟---简易版
- MFC显示bmp图像
- T6 v6.2puls1 安装了最新补丁之后采购发票结算之后入库单价税合计有1分差额
- ArcGIS 图像合并至新栅格图层
- 压缩ppt文件大小的方法
- 【新征程】1、考研路漫漫
- 吃着火锅唱着歌学会Docker
- win7去除快捷方式小箭头
- setcpu_SetCPU中文版