- ベストアンサー
C言語コンパイルエラー cygwin
- windows7の64bitでcygwinを使用しております。過去に作成されたソースファイルをコンパイルしたいのですが、画像のようなエラーが出てしまい、うまくいきません。おかしなところがあれば、ご指摘いただけないでしょうか。
- 114行目のsprintf関数を確認してください。/media/HD/WWE data/mm/222/というディレクトリパスにファイル名を追加する処理です。
- 198行目のxx変数への代入が正しく行われているか確認してください。hex配列の要素を負の数に変換し、4294967295を加えた値を代入しています。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
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コマンドがあるからです。
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
「宣言があって定義がない」場合には, 変数でもリンクエラーになります>#4.
- asuncion
- ベストアンサー率33% (2127/6289)
>4m.cの中でcpgopen, cpgsubp, cpgpapという3つの関数または変数にアクセスしていると思います。 関数であって、変数ではないと思います。 変数ならば、今回のようなリンク時ではなく、コンパイル時にエラーが出ます、よね?
- kmee
- ベストアンサー率55% (1857/3366)
シェルで空白のあるファイルやディレクトリを使うときに\でエスケープするのは、単語の区切りと区別がつかないから。 fopenの第一引数は、それ全体でファイル名だとはっきりしてるから、エスケープの必要はありません。 # シェルでもファイル名全体をクオートすれば\は必要はありません。 あとは、エラーにはなってないけど > sprintf(file_in,"%s%s",file_in,".dat"); sprintfで自分自身に追加するのはやめた方がいいです。 > xx=hex[i]*(-1)+4294967295; unsigned longに intの-1 掛けても、int→unsigned longの暗黙の変換が起こって、負になりません。 オーバーフローしてビットパターンは同じになるけど。
お礼
回答有難うございます。 \を消去するとエラーが一つ消えました。
- Tacosan
- ベストアンサー率23% (3656/15482)
上の警告は「そんなエスケープシーケンス知らん」といっているんでしょう. 「\ 」というエスケープシーケンスをどこで見ましたか? 下の警告は 4294967295 の扱いが変わってるよ, ということ. unsigned int なのか long int なのかその他なのかを明示してやってください. それ以外のエラーは「そんなシンボル知らない」といっているので, 必要な何かを追加してください.
お礼
有難うございます。 4294967295Uとするとエラーが一つ消えました。
お礼
回答有難うございます。 以下のように記入した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)