windows搭建gcc開發環境(msys2) objdump
前言
可能你並不太了解msys2,但是作為一個程序員,你一定知道mingw,而msys2就集成了mingw,同時msys2還有一些其他的特性,例如包管理器等。
msys2可以在windows下搭建一個完美的類linux環境,包括bash、vim、gcc、make等工具都可以通過包管理器來添加和卸載
msys2的包管理器是使用的pacman,用過archlinux的應該都知道pacman了。
我們現在的目標是要集成make+gcc+gdb的一條編譯工具
安裝
下載地址:
msys2
如果是exe,直接雙擊安裝,如果是zip,直接解壓到安裝的地方即可。然後雙擊msys2.exe運行
給 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 版或更新版本<http://gnu.org/licenses/gpl.html>。
本軟件是自由軟件:您可以自由修改和重新發布它。
在法律允許的範圍內沒有其他保證。
然後測試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 <stdio.h>
int main()
{
printf("abcDEF\r\n");
}
保存
然後我們通過cd 命令將msys的目錄切換到這個c文件處
後執行
$gcc demo.c -o demo
如果編譯沒有錯誤,那麽會在當前目錄下生成demo.exe,然後運行:
$./demo.exe
即可看到運行結果
運行過程如下:
[email protected] MSYS /f/xml/test/DEMO1
$ gcc demo.c -o demo
[email protected] MSYS /f/xml/test/DEMO1
$ ls
demo.c demo.exe
[email protected] MSYS /f/xml/test/DEMO1
$ ./demo.exe
abcDEF
當然,如果我們需要進行細致的分析代碼,在編譯的時候就帶上-g參數,然後通過objdump來分析匯編源碼吧
[email protected] MSYS /f/xml/test/DEMO1
$ gcc demo.c -g -o demo
[email protected] 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
[email protected] MSYS /f/xml/test/DEMO1
$ objdump -S ./demo.exe
./demo.exe: 文件格式 pei-x86-64
Disassembly of section .text:
00000001004010e0 <main>:
#include <stdio.h>
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 <puts>
1004010f9: b8 00 00 00 00 mov $0x0,%eax
}
當然我們也可以安裝gdb,然後通過gdb來調試代碼
作者:苦境名人
鏈接:https://www.jianshu.com/p/713f8588ba18
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並註明出處。
windows搭建gcc開發環境(msys2) objdump