2017-03-08 11 views
0

私は、CUDDパッケージのバージョン3.0.0の使い方を学ぶための簡単なプログラムを実行しようとしています。私はパッケージをダウンロードしてインストールしました:(1- ./configure 2- make 3- make check)。CUDDパッケージ:問題コンパイルとメイクファイル

私は、次の簡単なプログラム作成:

#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; 
    } 

を私はそれを行うことができますどのように、それをコンパイルするメイクファイルを作成したいですか? また、コマンドラインでコンパイルしたい場合、どうすればライブラリをリンクできますか?

+0

[定義されていない参照/未解決の外部シンボルエラーとは何か、それを修正する方法は?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-外部記号エラーと方法i-fix) – Olaf

答えて

1

バージョン3では、CUDDはビルドシステムの大幅な見直しを行ったため、CUDDを使用するプログラムをコンパイルするための古いHOWTOはもはや適用されません。

ビルドプロセスを簡素化するために、私は一般的に静的CUDD に対してを構築することをお勧めします - これはあなたがCUDDライブラリへのパスを与え、および/または「の/ usrにCUDDライブラリをインストールしなくても、後にコンパイルされたプログラムを実行することができます/ 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が動作するためには、「行内の4つのスペース」がタブである必要があることに注意してください。 "test.c"と同じディレクトリに "Makefile"という名前で保存すると、 "make"を実行するとプログラムがビルドされます。

+0

ありがとうございました。残念ながら私はもう一度エラーが発生します: "ld:-lcrt0.oのライブラリが見つかりません"、これで助けてくれますか? – kafka

+1

"-static"を削除しようとしましたが、うまくいくようです。 – kafka

関連する問題