CUDD 包:问题编译和生成文件
CUDD package : problems compile and makefile
我正在尝试 运行 一个简单的程序来学习如何使用 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 来编译它,我该怎么做?
此外,如果我想通过命令行编译它,我该如何link它的库?
在版本 3 中,CUDD 对其构建系统进行了重大改革,因此用于编译使用 CUDD 的程序的旧版 HOWTO 不再适用。
为了简化构建过程,我通常建议针对 CUDD 静态构建——这允许您 运行 稍后编译的程序,而无需提供路径CUDD 库 and/or 将 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 或使用替代构建系统。请注意,在上面的文件中,"four spaces in a row" 需要是制表符才能使 Makefile 工作。如果将它存储在与 "test.c" 相同的目录中,名称为 "Makefile",运行ning "make" 应该构建程序。
我正在尝试 运行 一个简单的程序来学习如何使用 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 来编译它,我该怎么做? 此外,如果我想通过命令行编译它,我该如何link它的库?
在版本 3 中,CUDD 对其构建系统进行了重大改革,因此用于编译使用 CUDD 的程序的旧版 HOWTO 不再适用。
为了简化构建过程,我通常建议针对 CUDD 静态构建——这允许您 运行 稍后编译的程序,而无需提供路径CUDD 库 and/or 将 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 或使用替代构建系统。请注意,在上面的文件中,"four spaces in a row" 需要是制表符才能使 Makefile 工作。如果将它存储在与 "test.c" 相同的目录中,名称为 "Makefile",运行ning "make" 应该构建程序。