我正在尝试运行一个简单的程序,以学习如何使用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进行编译,该怎么做?
此外,如果要通过命令行进行编译,该如何链接其库?

最佳答案

在版本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的更多功能,则可能必须为编译器添加更多的include目录,以查找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起作用。如果将其存储在与“test.c”相同的目录下,名称为“Makefile”,则运行“make”将生成程序。

08-16 20:34