Пакет CUDD: проблемы компиляции и 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;
   }

Я хотел бы создать make-файл для его компиляции. Как я могу это сделать? Более того, если я хочу скомпилировать его через командную строку, как я могу связать его библиотеки?

1 ответ

Решение

В версии 3 CUDD подверглась серьезной переработке своей системы сборки, поэтому более старые HOWTO для компиляции программ, использующих CUDD, больше не применяются.

Чтобы упростить процесс сборки, я обычно рекомендую выполнять статическую сборку с использованием 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", являются параметрами компоновщика в приведенной выше команде компиляции, в то время как остальные параметры относятся к компилятору - это важно знать, когда вы начинаете писать Makefiles для автоматизации вашего процесса сборки. Образец 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)

Пожалуйста, ознакомьтесь с более полной документацией о том, как писать Makefiles или использовать альтернативную систему сборки. Обратите внимание, что в приведенном выше файле "четыре пробела в строке" должны быть вкладками, чтобы Makefile работал. Если вы храните его в том же каталоге, что и "test.c" под именем "Makefile", запуск "make" должен собрать программу.

Другие вопросы по тегам