mcmas-1.3.0编译时可能遇到的问题

本文档详细列举了在编译MCMAS-1.3.0过程中可能遇到的问题及解决方法。包括Makefile中目标名不一致、all目标的gcc命令错误处理C++文件、bison库版本要求以及cuddInt.h错误的解决策略。对于开发者来说,理解并解决这些问题对于成功编译MCMAS至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mcmas-1.3.0

以下为mcmas编译时可能会遇到的一些问题。

1.

目录mcmas-1.3.0/cudd-2.5.0-exp/下的Makefile文件中,目标objlib,与声明伪目标时的名称不一致,即定义目标的名称为objlib,但上方声明伪目标.PHONY用的名称却是libobj。需要注意的是,这并不影响make objlib命令的执行,毕竟,当前所在文件夹并没有名称为objlib的文件。(伪目标的用途)
在这里插入图片描述

2.

同样为目录mcmas-1.3.0/cudd-2.5.0-exp/下的Makefile文件中,all目标的命令存在错误。

all:
    sh ./setup.sh
    @for dir in $(DIRS); do \
        (cd $$dir; \
        echo Making all in $$dir ...; \
	make CC=$(CC) RANLIB=$(RANLIB) MFLAG= MNEMLIB= ICFLAGS="$(ICFLAGS)" XCFLAGS="$(XCFLAGS)" DDDEBUG="$(DDDEBUG)" MTRDEBUG="$(MTRDEBUG)" LDFLAGS="$(LDFLAGS)" PURE="$(PURE)" EXE="$(EXE)" all )\
done

在这里插入图片描述

关注all目标里的代码@for dir in $(DIRS);,同时注意到上图中的$(DIRS),包括DIRS = $(BDIRS) obj,而BDIRS = cudd dddmp mtr st util epd
其中obj目录的文件结构为:

.
├── cuddObj.cc
├── cuddObj.hh
├── cuddObj.o
├── libobj.a
├── Makefile
├── .Makefile.swp
├── testobj.cc
└── tree.md

在这里插入图片描述

可以看到obj下是包括有C++文件的,但all目标的编译命令用的是gcc,因此gcc命令无法处理C++文件,因此会报错。如有疑惑可以看objlib目标的代码,objlib目标使用两种编译命令做了分别处理。

3.

mcmas1.3.0要求bison库版本号为2.4.1或者更高,但注意版本不能太高,bison最新版本已更至3.7.*,在新版本中C++ parser Interface 更改 parser class name的代码已更改,表现为mcmas1.3.0/parser/目录下的nssis_new.yy文件中,%define "parser_class_name" "mcmas_parser" 须修改为 %define api.parser.class {mcmas_parser}
建议在编译时遇到nssis_new.yy报错时再修改此处。
在这里插入图片描述

4.

如遇到类似于cuddInt.h error时,且mcmas1.3.0/include/目录下的所有文件并没有完整代码(就只有一行#include),将include文件夹删掉,重新编译即可。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值