プロが教えるわが家の防犯対策術!

windows7の64bitでcygwinを使用しております。

過去に作成されたソースファイルをコンパイルしたいのですが、画像のようなエラーが出てしまい、うまくいきません。
おかしなところがあれば、ご指摘いただけないでしょうか。

114行目
sprintf(file_in,"/media/HD/WWE\ data/mm/222/%s%s","",file_name);
sprintf(file_in,"%s%s",file_in,".dat");
if((fp = fopen(file_in,"r")) !=0){
printf("%s\n",file_in);
sprintf(print_name,"%s",file_in);



static unsigned long hex[nn],xx;
198行目
xx=hex[i]*(-1)+4294967295;

「C言語コンパイルエラー cygwin」の質問画像

A 回答 (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コマンドがあるからです。
    • good
    • 0
この回答へのお礼

回答有難うございます。

以下のように記入した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)

お礼日時:2011/08/21 16:48

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

    • good
    • 0

>4m.cの中でcpgopen, cpgsubp, cpgpapという3つの関数または変数にアクセスしていると思います。



関数であって、変数ではないと思います。
変数ならば、今回のようなリンク時ではなく、コンパイル時にエラーが出ます、よね?
    • good
    • 0

シェルで空白のあるファイルやディレクトリを使うときに\でエスケープするのは、単語の区切りと区別がつかないから。


fopenの第一引数は、それ全体でファイル名だとはっきりしてるから、エスケープの必要はありません。
# シェルでもファイル名全体をクオートすれば\は必要はありません。

あとは、エラーにはなってないけど
> sprintf(file_in,"%s%s",file_in,".dat");
sprintfで自分自身に追加するのはやめた方がいいです。

> xx=hex[i]*(-1)+4294967295;

unsigned longに intの-1 掛けても、int→unsigned longの暗黙の変換が起こって、負になりません。
オーバーフローしてビットパターンは同じになるけど。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/21 16:44

上の警告は「そんなエスケープシーケンス知らん」といっているんでしょう. 「\ 」というエスケープシーケンスをどこで見ましたか?



下の警告は 4294967295 の扱いが変わってるよ, ということ. unsigned int なのか long int なのかその他なのかを明示してやってください.

それ以外のエラーは「そんなシンボル知らない」といっているので, 必要な何かを追加してください.
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/18 13:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!