0

私は現在winexeプロジェクトに取り組んでいます。winexe は、 -mno-cygwin を CFLAGS として使用して、Linux で Windows C コードをコンパイルします。

以下は、ディレクトリwinexesvcの下のMakefileです:-

CFLAGS=-mno-cygwin -Os
LDFLAGS=-mno-cygwin -s -Os

CC_WIN32 := $(shell bash -c 'which {i386,i586}-{mingw32,mingw32msvc}-gcc')
CC_WIN64 := $(shell bash -c 'which {x86_64,amd64}-{mingw32,mingw32msvc}-gcc')

all: winexesvc32_exe.c winexesvc64_exe.c

winexesvc32.exe: winexesvc32.o service32.o
    $(CC_WIN32) $(LDFLAGS) -o $@ $^

winexesvc64.exe: winexesvc64.o service64.o
    $(CC_WIN64) $(LDFLAGS) -o $@ $^

%32.o: %.c
    $(CC_WIN32) -c $(CPPFLAGS) $(CFLAGS) -o $@ $^

%64.o: %.c
    $(CC_WIN64) -c $(CPPFLAGS) $(CFLAGS) -o $@ $^

winexesvc32_exe.c: winexesvc32.exe bin2c.exe
    ./bin2c.exe winexesvc32_exe winexesvc32.exe > $@

winexesvc64_exe.c: winexesvc64.exe bin2c.exe
    ./bin2c.exe winexesvc64_exe winexesvc64.exe > $@

bin2c.exe: bin2c.c
    gcc -s -o $@ $^

clean:
    -@rm *.exe *.o *_exe.c

変更が行われない場合、コード全体が正常にコンパイルおよび実行されます。

ただし、winexsvc.c ファイルまたは winexesvc64_exe.c ファイルまたは winexesvc32_exe.c ファイルを置き換えるたびに (これら 3 つのファイルを変更する必要があります)。winexesvc.c を変更したコードに置き換えると、次のエラーが表示されます。変更されたコードは、他のファイルやファイル外の関数を呼び出しません。

したがって、問題は、上記の 3 つのファイルでいくつかの変更を行うと、上記のエラーが発生することです。なぜこれが起こっているのですか?

PS :- gcc の -mno-cygwin オプションのエラーに関する他の投稿を読みました。しかし、それらは私の問題には関係ありません。追加情報 :- [winexe の下の winexesvc フォルダーの Makefile から取得しました。]

4

1 に答える 1

0

解決済み:-i586-mingw32msvc-gccコマンドと適切なフラグを使用して、すべてのファイルを手動でコンパイルし、それに応じてリンクしました。

取得しました、必要な結果。

于 2013-01-03T19:53:48.067 に答える