我正在尝试编写一个程序来调用gcc来编译和链接在我的程序中构建的C文件。但是,如果我尝试使用以下方法调用gcc:
system("gcc -g -Wall build.c -o build.exe");
或更好(因为我想从gcc管道输出):
popen("gcc -g -Wall build.c -o build.exe", "r");
我得到的是我认为的链接错误:
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../lib/libcygwin.a(libcmain.o): In function `main':
/usr/src/debug/cygwin-2.0.2-1/winsup/cygwin/lib/libcmain.c:39: undefined reference to `WinMain'
/usr/src/debug/cygwin-2.0.2-1/winsup/cygwin/lib/libcmain.c:39:(.text.startup+0x7f): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `WinMain'
collect2: error: ld returned 1 exit status
我通过使用特定于Windows的ShellExecute
来缓解此问题:
HINSTANCE hRet = ShellExecute(
0,
NULL,
"cmd.exe",
"/c gcc -g -Wall build.c -o build.exe",
NULL,
SW_HIDE);
这样运行一切正常,但是,使用ShellExecute
不允许我管道输出以查看文件是否正确编译,并且我希望有一个跨平台非Windows特定方式来执行此操作,因此使用Windows函数CreateProcess
是不受欢迎的,我读过popen
应该让我这样做。
我在PATH变量中定义了gcc的路径,它可以从cmd正确运行。
我错过了一个基本概念,还是有更好的方法来做到这一点?
答案 0 :(得分:1)
哇。我现在感觉很糟糕......
我从未关闭build.c文件!因此gcc无法编译它。
感谢您的帮助,这可能对我的愚蠢有帮助!