记一次在windows下编译一个C++系统库的经历

记一次在windows下编译一个C++系统库的经历

简要介绍

这一切都源于我更新了自己的BIOS,自那以后,我每次进我的双系统都需要进BIOS设置;而且有些讨厌双系统没办法同时开启这一点(主要是linux下配置这个库非常麻烦,所以没有在虚拟机上再安装一次)…
于是乎,为什么不在windows上编译运行这个库(Booksim)?
首先,介绍下BookSim,这个软件是一个片上网络仿真工具,主要由C++语言编写,但是很特殊的是,,,他还自带了词法分析器和语法分析器的代码,而这两个(flex和bison),是用C语言写的!
进入配置环节:

步骤1

需要在windows上安装gcc、g++编译环境,我是用的MinGW64;其实这很早以前就弄好了,因为我用的VSCode写c++代码呀。这样在终端用g++命令就可以很轻松的运行代码了,这一点只为专(装)业(B)!

步骤2

安装flex和bison for win,去sourceforge上找的,配置环境变量:系统Path,打开cmd输入"flex -V"和"bison -V"查看版本,如果还显示不是内部命令,可能是下载的flex有一个前缀(比如win_flex.exe),改为flex即可,bison同上。

步骤3

可能还会出现找不到lex.yy.c或者y.tab.c的错误,可以尝试安装m4 for window。配置同上。可是,,,在cmd中检查m4版本的时候提示缺少动态库:regex2.dll。随意百度一个,然后下好之后放到下面文件夹下(64位系统):

C:\Windows\SysWOW64

如果是32位系统,放到:

C:\Windows\System32

步骤4:问题来了

最大的问题出现了!我们知道,gcc和cc都是对.c文件进行编译,而makefile里编译lex.yy.c和y.tab.c都采用的cc命令,可是cc这个命令在我现有的windows下是不能识别的啊!但是在Linux下编译时,cc指向gcc。我这只有gcc(比cc强大的多),我改用gcc编译这两个c语言代码,其他的cpp代码仍然采用g++,这是没有问题的,那么按照常人的想法,改makefile不就完了?反正makefile就好比shell脚本,进行编译程序的。
原来采用CC命令的makefile:
在这里插入图片描述
我改了还不行嘛!改成GCC:神意思?我的gcc命令呢!
在这里插入图片描述
WARNING!异常,抛出异常,有没有大佬能帮忙解释一下?

步骤5

于是乎,,,我决定手动编译这两个混在cpp文件中的c文件!

gcc Wall -I. -Iarbiters -Iallocators -Irouters -Inetworks -Ipower  -O3 -g -c lex.yy.c -o obj/lex.yy.o

成功生成了lex.yy.o,bison的同理。
再次make,编译成功。

分享并记录在个在windows下使用gcc和g++编译器的案例。
(哭!我要装回linux!)

猜你喜欢

转载自blog.csdn.net/wch0lalala/article/details/105093003
今日推荐