CUDD包:问题编译和makefile

时间:2017-03-08 17:48:30

标签: c compiler-errors compilation cudd

我试图运行一个简单的程序来学习如何使用CUDD软件包3.0.0版。我下载了软件包并安装了它:( 1- ./configure 2- make 3 make check)。

我创建了以下简单程序:

  #include <stdio.h>
  #include "cudd.h"
  #include "util.h"

  int main (int argc, char *argv[])
  {
       printf("Its working");
       DdManager *gbm; /* Global BDD manager. */
       char filename[30];
       gbm = Cudd_Init(0,0,CUDD_UNIQUE_SLOTS,CUDD_CACHE_SLOTS,0); 
       DdNode *bdd = Cudd_bddNewVar(gbm); 
       Cudd_Ref(bdd); 
       Cudd_Quit(gbm);
       return 0;
   }

我想创建一个makefile来编译它,我该怎么办? 而且,如果我想通过命令行编译它,我该如何链接它的库?

1 个答案:

答案 0 :(得分:1)

在版本3中,CUDD对其构建系统进行了重大改进,因此用于编译使用CUDD的程序的旧HOWTO不再适用。

为了简化构建过程,我通常建议针对CUDD 静态构建 - 这允许您运行后来编译的程序,而不提供CUDD库的路径和/或安装CUDD库进入“/ usr / lib”。

为此,首先使用:

重新编译cudd
 ./configure --enable-dddmp --enable-obj --enable-shared --enable-static; make

这确保构建静态库,以及稍后可能需要的CUDD的可选组件。

然后,您可以从命令行编译示例程序,如下所示:

gcc test.c -o testprogram -I /path/to/cudd-3.0.0/cudd -I /path/to/cudd-3.0.0/util -I /path/to/cudd-3.0.0/ -static -L /path/to/cudd-3.0.0/cudd/.libs/ -lcudd -lm

还有其他方法可以针对CUDD进行编译,但我个人并不是全球安装库的忠实粉丝。如果您开始使用CUDD的更多功能,则可能必须为编译器添加更多包含目录以查找CUDD .h文件,并且可能需要更多库。请注意,以“-static”开头的所有参数都是上面编译命令中的链接器参数,而其他参数则是编译器 - 这一点非常重要,可以了解何时开始编写Makefile以自动化构建过程。示例Makefile如下所示:

CFLAGS = -I /path/to/cudd-3.0.0/cudd -I /path/to/cudd-3.0.0/util -I /path/to/cudd-3.0.0/
LFLAGS = -static -L /path/to/cudd-3.0.0/cudd/.libs/ -lcudd -lm

default: testprogram

testprogram: test.o
    $(CC) test.o -o testprogram $(LFLAGS)

test.o: test.c
    $(CC) test.c -c -o test.o $(CFLAGS)

有关如何编写Makefile或使用替代构建系统的信息,请参阅更全面的文档。请注意,在上面的文件中,“连续四个空格”需要是制表符才能使Makefile正常工作。如果将它存储在名为“Makefile”的“test.c”目录下,则运行“make”应该构建程序。