在GCC 4.6中使用-mno-cygwin选项

时间:2012-12-26 14:23:24

标签: c linux makefile cygwin winexe

我目前正在研究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个文件中做一些修改时,我得到了上面提到的错误。 知道为什么会这样吗?

P.S: - 我已经阅读了关于gcc中-mno-cygwin选项错误的其他帖子。 但那些与我的问题无关。 附加信息 :- [我从winexe下的winexesvc文件夹的Makefile中得到了这个。]

1 个答案:

答案 0 :(得分:0)

解决: - 我使用i586-mingw32msvc-gcc命令以及合适的标志来手动编译每个文件,然后相应地链接它。

得到了所需的结果。