1

さて、私が書いたプログラムの基本的な Makefile を作成する必要があります。ファイルは次のとおりです。

list.c
hash.c
order_book.c
libdefault_hash.a //provided already so I do not need to create.

orderbook がコンパイル時にそれらを使用できるように、list.c と hash.c のライブラリを作成する必要があります。だから、これは私が現在持っているものですMakefile

all: orderbook

orderbook: orderbook.c liblist.a libhash.a
    gcc -std=c99 -o orderbook order_book.c list.c -L. -llist -lhash -libdefault_hash

liblist.a: list.c
    gcc -std=c99 -c list.c
    ar rcu liblist.a list.o

libhash.a: hash.c
    gcc -std=c99 -c hash.c
    ar rcu libhash.a hash.o

makefile がどのように機能するかについての私の理解は非常に小さいですが、ここに私の思考プロセスがあります。

  1. all: orderbook実行されることを意味しorderbook:ます。

  2. orderbook.c次にコンパイルされ、コードがライブラリをコンパイルします。

  3. ライブラリがコンパイルされると、次のように実行されます。

    gcc -std=c99 -o orderbook order_book.c list.c -L. -llist -lhash -libdefault_hash

結果は orderbook という名前の単純なプログラム ファイルになるはずですが、ターミナルは次のように出力します。

$ make
gcc -std=c99 -o orderbook order_book.c list.c hash.c -L. -llist -lhash -libdefault_hash
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/../../../../x86_64-pc-linux-gnu/bin/ld: skipping incompatible ./liblist.a when searching for -llist
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -llist
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -libdefault_hash
collect2: ld returned 1 exit status
make: *** [orderbook] Error 1
$

ヘルプ/ガイダンスは大歓迎です。

4

1 に答える 1

1

これを小さなステップで見てみましょう。まず、あなたが考えているような一連のコマンドを次に示します。

gcc -std=c99 -c list.c -o list.o
ar rcu liblist.a list.o
gcc -std=c99 -c hash.c -o hash.o
ar rcu libhash.a hash.o
gcc -std=c99 -o orderbook order_book.c -L. -llist -lhash -libdefault_hash

これらのコマンドを Make なしで試して、どのコマンドが機能するかを確認してください (「rcu」は「-rcu」であってはなりませんか?)。この回答にコメントするか、質問を編集して、結果をお知らせください。これらのコマンドのいずれかが機能したら、makefile の作成を開始できます。

于 2013-10-20T04:59:41.543 に答える