1

私は実際に C で makefile を作成しようとしていますが、すべてのファイルをリンクする際に深刻な問題が発生するようです。基本的に、ソケットを備えたサーバーを介して実行される辞書を作成しようとしています。ディクショナリを初期化し、ファイル servidor-dict.c のリクエストを解釈し、dict.c からリクエストを送信します。また、ソケットを使用するための基本的な関数 (j_socket()、j_bind()...) を含む libjsocket.o という 2 つのファイルもあります。libjsocket.o のヘッダーである jsocket.h。

メイクファイルを実行すると、コンソールに次のように表示されます。

Undefined symbols for architecture x86_64:
  "_j_socket", referenced from:
      _main in servidor-dict.o
  "_j_bind", referenced from:
      _main in servidor-dict.o
  "_j_accept", referenced from:
      _main in servidor-dict.o

どうやら、ソケットファイルとサーバー/クライアントファイルとの間に正しいリンクを作成していないようです。私のメイクファイルは次のとおりです。

CFLAGS= -c -Wall
object= servidor-dict.o libjsocket.o
object1 = dict.o libjsocket.o

tarea: dict servidor-dict 

servidor-dict: $(object)
    gcc -g $(object) -o servidor-dict

dict: $(object1)
    gcc -g $(object1) -o dict

%.o: %.c
    gcc $(CFLAGS) $<

servidor-dict.c: jsocket.h
dict.c: jsocket.h
libjsocket.c: jsocket.h

clean : 
    rm -rf *.o tarea
4

2 に答える 2

0

ここには複数の問題があります...

  • libsocket.oする必要がありますlibjsocket.o
  • libjsocket.o何かに依存する必要があります ( libjsocket.c?)
  • ルールservidor-dict.o:servidor-dict
  • 次に、実際のルールservidor-dict.oがありません (すべての .o ファイルの生成を処理する魔法のルールの使用を検討する必要があります)。

Makefile を変更した後は、忘れずにクリーンアップしてください。

于 2013-06-29T00:25:36.670 に答える