• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語コンパイルエラー cygwin)

C言語コンパイルエラー cygwin

このQ&Aのポイント
  • windows7の64bitでcygwinを使用しております。過去に作成されたソースファイルをコンパイルしたいのですが、画像のようなエラーが出てしまい、うまくいきません。おかしなところがあれば、ご指摘いただけないでしょうか。
  • 114行目のsprintf関数を確認してください。/media/HD/WWE data/mm/222/というディレクトリパスにファイル名を追加する処理です。
  • 198行目のxx変数への代入が正しく行われているか確認してください。hex配列の要素を負の数に変換し、4294967295を加えた値を代入しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.3

2つの警告(warning)については既に他の方が答えたとおりなので、3つのundefined referenceエラーについて。 4m.cの中でcpgopen, cpgsubp, cpgpapという3つの関数または変数にアクセスしていると思います。それらの定義が見つからないというエラーです。どこで定義されているかを探して、コンパイラ(gcc)に教えてあげてください。たとえば、その3つがxyz.cというファイルで定義されているのであれば $ gcc 4m.c xyz.c -o test のようにします。 ついでに書くと、生成する実行ファイルの名前にtestを使うのはお勧めしません。Cygwinには同名のtestコマンドがあるからです。

ibfezuki
質問者

お礼

回答有難うございます。 以下のように記入したmakefileでコンパイルできました。 # Compiler, tools and options OBJS = 4m.o TARGET = 4m CC = g77 CFLAGS = -O3 -march=i686 -fomit-frame-pointer -malign-double -funroll-loops -Wall INCDIRS = -I/usr/local/pgplot LIBDIRS = -L/usr/local/pgplot -L/usr/X11R6/lib LIBS = -lcpgplot -lpgplot -lm -lX11 -lpng ## Implicit rules .SUFFIXES: .c .o ## Build rules all: $(TARGET) $(TARGET): $(OBJS) $(CC) $(OBJS) -o $(TARGET) $(CFLAGS) $(LIBDIRS) $(LIBS) ## Compile .c.o: $*.c $(CC) -c $*.c $(CFLAGS) $(INCDIRS) ## Clean clean: rm -f $(OBJS) $(TARGET)

その他の回答 (4)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

「宣言があって定義がない」場合には, 変数でもリンクエラーになります>#4.

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.4

>4m.cの中でcpgopen, cpgsubp, cpgpapという3つの関数または変数にアクセスしていると思います。 関数であって、変数ではないと思います。 変数ならば、今回のようなリンク時ではなく、コンパイル時にエラーが出ます、よね?

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

シェルで空白のあるファイルやディレクトリを使うときに\でエスケープするのは、単語の区切りと区別がつかないから。 fopenの第一引数は、それ全体でファイル名だとはっきりしてるから、エスケープの必要はありません。 # シェルでもファイル名全体をクオートすれば\は必要はありません。 あとは、エラーにはなってないけど > sprintf(file_in,"%s%s",file_in,".dat"); sprintfで自分自身に追加するのはやめた方がいいです。 > xx=hex[i]*(-1)+4294967295; unsigned longに intの-1 掛けても、int→unsigned longの暗黙の変換が起こって、負になりません。 オーバーフローしてビットパターンは同じになるけど。

ibfezuki
質問者

お礼

回答有難うございます。 \を消去するとエラーが一つ消えました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

上の警告は「そんなエスケープシーケンス知らん」といっているんでしょう. 「\ 」というエスケープシーケンスをどこで見ましたか? 下の警告は 4294967295 の扱いが変わってるよ, ということ. unsigned int なのか long int なのかその他なのかを明示してやってください. それ以外のエラーは「そんなシンボル知らない」といっているので, 必要な何かを追加してください.

ibfezuki
質問者

お礼

有難うございます。 4294967295Uとするとエラーが一つ消えました。