热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

windows搭建gcc开发环境(msys2)objdump

前言可能你并不太了解msys2,但是作为一个程序员,你一定知道mingw,而msys2就集成了mingw,同时msys2还有一些其他的特性,例如包管理器等。msys2可以在wind


前言

可能你并不太了解msys2,但是作为一个程序员,你一定知道mingw,而msys2就集成了mingw,同时msys2还有一些其他的特性,例如包管理器等。

msys2可以在windows下搭建一个完美的类linux环境,包括bash、vim、gcc、make等工具都可以通过包管理器来添加和卸载

msys2的包管理器是使用的pacman,用过archlinux的应该都知道pacman了。

我们现在的目标是要集成make+gcc+gdb的一条编译工具


安装

下载地址:

msys2

如果是exe,直接双击安装,如果是zip,直接解压到安装的地方即可。然后双击msys2.exe运行

[图片上传失败...(image-295493-1523187370956)]


给 MSYS2 添加中科大的源

使用过archlinux的应该会知道,pacman在安装的时候,如果源没有设置好,下载是很慢的。

需要修改的文件是:

1. \etc\pacman.d\mirrorlist.mingw32

2. \etc\pacman.d\mirrorlist.mingw64

3. \etc\pacman.d\mirrorlist.msys

简单的说 msys64\etc\pacman.d 目录下有三个文件。

mirrorlist.msys

mirrorlist.mingw64

mirrorlist.mingw32

这三个文件记录了都有哪些源。下面把我添加之后的文件内容贴上来。

首先是 mirrorlist.msys:

##
## MSYS2 repository mirrorlist
##
## Primary
## msys2.org
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/
Server = http://repo.msys2.org/msys/$arch
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch
Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/

mirrorlist.mingw64:

##
## 64-bit Mingw-w64 repository mirrorlist
##
## Primary
## msys2.org
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
Server = http://repo.msys2.org/mingw/x86_64
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/x86_64
Server = http://www2.futureware.at/~nickoe/msys2-mirror/x86_64/
Server = http://mirror.bit.edu.cn/msys2/REPOS/

mirrorlist.mingw32:

##
## 32-bit Mingw-w64 repository mirrorlist
##
## Primary
## msys2.org
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/
Server = http://repo.msys2.org/mingw/i686
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686
Server = http://www2.futureware.at/~nickoe/msys2-mirror/i686/

MSYS2 镜像使用帮助
收录架构
MINGW: i686, x86_64
MSYS: i686, x86_64
安装
请访问该镜像目录下的 distrib/ 目录(x86_64 、i686),找到名为 msys2-<架构>-<日期>.exe 的文件(如 msys2-x86_64-20141113.exe),下载安装即可。
pacman 的配置
编辑 /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
编辑 /etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
编辑 /etc/pacman.d/mirrorlist.msys ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
然后执行 pacman -Sy 刷新软件包数据即可。

安装可以跳过直接看pacman即可,参照这修改

中国科学技术大学方法可以参考清华的。


下载工具包

下载工具包这一部分就是纯粹的pacman知识了,涉及的指令有:

pacman -Sy 更新软件包数据

pacman -Syu 更新所有

pacman -Ss xx 查询软件xx的信息

pacman -S xx 安装软件xx


下载make

我们先通过命令pacman -Ss make查询完整的make包名

我们可以看到,每个软件大致分为了三大类:mingw32、mingw64、msys,如果想下载mingw那么就要对应着自己的系统下载,32位和64位要区分

我们下载msys类就行。比如我们搜到的make是这样的:

msys/automake1.9 1.9.6-2 (base-devel)
A GNU tool for automatically creating Makefiles
msys/cmake 3.6.2-1
A cross-platform open-source make system
msys/colormake-git r8.9c1d2e6-1
Colorized build output
msys/make 4.2.1-1 (base-devel) [已安装]
GNU make utility to maintain groups of programs
msys/make-git 4.1.8.g292da6f-1
GNU make utility to maintain groups of programs
msys/perl 5.24.1-2 (base-devel)

即msys/make,所以我们安装的时候只需要输入:

pacman -S msys/make

或者直接输入

pacman -S make

就会默认安装msys/make


下载gcc

我们先通过命令pacman -Ss gcc查询完整的gcc包名

mingw64/mingw-w64-x86_64-gcc-objc 6.3.0-1 (mingw-w64-x86_64-toolchain)
GNU Compiler Collection (ObjC,Obj-C++) for MinGW-w64
mingw64/mingw-w64-x86_64-lcov 1.12-1
front-end for GCC's coverage testing tool gcov
msys/gcc 6.3.0-1 (msys2-devel)
The GNU Compiler Collection - C and C++ frontends
msys/gcc-fortran 6.3.0-1 (msys2-devel)
Fortran front-end for GCC

即msys/gcc,所以我们安装的时候只需要输入:

pacman -S msys/gcc

或者

pacman -S gcc

测试

安装后我们测试一下:

make -v

显示类似如下内容说明安装成功:

GNU Make 4.2.1
为 x86_64-pc-msys 编译
Copyright (C) 1988-2016 Free Software Foundation, Inc.
许可证:GPLv3+:GNU 通用公共许可证第 3 版或更新版本
本软件是自由软件:您可以自由修改和重新发布它。
在法律允许的范围内没有其他保证。

然后测试gcc:

使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-msys/6.3.0/lto-wrapper.exe
目标:x86_64-pc-msys
配置为:/msys_scripts/gcc/src/gcc-6.3.0/configure --build=x86_64-pc-msys --prefix=/usr --libexecdir=/usr/lib --enable-bootstrap --enable-shared --enable-shared-libgcc --enable-static --enable-version-specific-runtime-libs --with-arch=x86-64 --with-tune=generic --disable-multilib --enable-__cxa_atexit --with-dwarf2 --enable-languages=c,c++,fortran,lto --enable-graphite --enable-threads=posix --enable-libatomic --enable-libcilkrts --enable-libgomp --enable-libitm --enable-libquadmath --enable-libquadmath-support --enable-libssp --disable-win32-registry --disable-symvers --with-gnu-ld --with-gnu-as --disable-isl-version-check --enable-checking=release --without-libiconv-prefix --without-libintl-prefix --with-system-zlib --enable-linker-build-id --with-default-libstdcxx-abi=gcc4-compatible
线程模型:posix
gcc 版本 6.3.0 (GCC)

其他的软件都是这么玩的,我就不介绍了。


编译测试

我们先新建一个demo.c文件,然后编写一段测试代码:

#include
int main()
{
printf("abcDEF\r\n");
}

保存

然后我们通过cd 命令将msys的目录切换到这个c文件处

后执行

$gcc demo.c -o demo

如果编译没有错误,那么会在当前目录下生成demo.exe,然后运行:

$./demo.exe

即可看到运行结果

运行过程如下:

xml@DESKTOP-B0SS2KE MSYS /f/xml/test/DEMO1
$ gcc demo.c -o demo
xml@DESKTOP-B0SS2KE MSYS /f/xml/test/DEMO1
$ ls
demo.c demo.exe
xml@DESKTOP-B0SS2KE MSYS /f/xml/test/DEMO1
$ ./demo.exe
abcDEF

当然,如果我们需要进行细致的分析代码,在编译的时候就带上-g参数,然后通过objdump来分析汇编源码吧

xml@DESKTOP-B0SS2KE MSYS /f/xml/test/DEMO1
$ gcc demo.c -g -o demo
xml@DESKTOP-B0SS2KE MSYS /f/xml/test/DEMO1
$ objdump -f ./demo.exe
./demo.exe: 文件格式 pei-x86-64
体系结构:i386:x86-64,标志 0x0000013a:
EXEC_P, HAS_DEBUG, HAS_SYMS, HAS_LOCALS, D_PAGED
起始地址 0x0000000100401000
xml@DESKTOP-B0SS2KE MSYS /f/xml/test/DEMO1
$ objdump -S ./demo.exe
./demo.exe: 文件格式 pei-x86-64
Disassembly of section .text:
00000001004010e0

:
#include
int main()
{
1004010e0: 55 push %rbp
1004010e1: 48 89 e5 mov %rsp,%rbp
1004010e4: 48 83 ec 20 sub $0x20,%rsp
1004010e8: e8 33 00 00 00 callq 100401120 <__main>
printf("abcDEF\r\n");
1004010ed: 48 8d 0d 3c 1f 00 00 lea 0x1f3c(%rip),%rcx # 100403030 <.rdata>
1004010f4: e8 37 00 00 00 callq 100401130


1004010f9: b8 00 00 00 00 mov $0x0,%eax
}

当然我们也可以安装gdb,然后通过gdb来调试代码




作者:苦境名人
链接:https://www.jianshu.com/p/713f8588ba18
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
推荐阅读
  • 一、ImageRequest不知道将ImageRequest放在这里进行介绍是否合适,因为毕竟它属于一个请求队列,与StringRequest、Json ... [详细]
  • 看完这篇还搞不懂HTTPS,就来找我!
    本文将为大家详细梳理一下H ... [详细]
  • 朋友们,过年好!目前想配置一台图片服务器,可实现类以下网站图片服务器功能https://car2.autoimg.cn/cardf即上传一张图片,可通过url中不同 ... [详细]
  • 情况说明最近打开Github经常会遇到用户头像或者仓库中的图片无法预览。F12打开控制台也能看到一堆报错信息。解决方法找到hosts文件Win:C:\Windows\Sys ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 大家好,我们是慢雾安全团队。 ... [详细]
  • 题目链接Reference:https:www.cnblogs.comdiltheyp9757781.html首先容易想到的常规dp是,初始化dp(i,j)0dp(i,j)0dp( ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
author-avatar
早安丶晚安丶英语连_691
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有