C++ 链接器输入文件未使用,因为链接未完成

C++ 链接器输入文件未使用,因为链接未完成,c++,gcc,linker,g++,C++,Gcc,Linker,G++,我试图在cygwin上编译一个简单的程序。我不知道为什么我的IDE(Netbeans)尝试使用“-c”标志。在项目属性->C++编译器->附加选项中,我没有'-C'标志。如何解决这个问题 "/usr/bin/make" -f nbproject/Makefile-Release.mk QMAKE= SUBPROJECTS= .clean-conf make[1]: Entering directory '/cygdrive/c/Users/user/Documents/NetBeansProj

我试图在cygwin上编译一个简单的程序。我不知道为什么我的IDE(Netbeans)尝试使用“-c”标志。在项目属性->C++编译器->附加选项中,我没有'-C'标志。如何解决这个问题

"/usr/bin/make" -f nbproject/Makefile-Release.mk QMAKE= SUBPROJECTS= .clean-conf

make[1]: Entering directory '/cygdrive/c/Users/user/Documents/NetBeansProjects/CppApplication_3'
rm -f -r build/Release
rm -f dist/Release/Cygwin-Windows/cppapplication_3.exe
make[1]: Leaving directory '/cygdrive/c/Users/user/Documents/NetBeansProjects/CppApplication_3'


CLEAN SUCCESSFUL (total time: 1s)

"/usr/bin/make" -f nbproject/Makefile-Release.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory '/cygdrive/c/Users/user/Documents/NetBeansProjects/CppApplication_3'
"/usr/bin/make"  -f nbproject/Makefile-Release.mk dist/Release/Cygwin-Windows/cppapplication_3.exe
make[2]: Entering directory '/cygdrive/c/Users/user/Documents/NetBeansProjects/CppApplication_3'
mkdir -p build/Release/Cygwin-Windows
rm -f build/Release/Cygwin-Windows/main.o.d
i686-pc-mingw32-g++ -E   -c -O2 -I/usr/include -I/usr/include/apr-1 -I/usr/include/libxml2 -I/usr/include/boost -I/usr/local/apr -std=c++11 -MMD -MP -MF build/Release/Cygwin-Windows/main.o.d -o build/Release/Cygwin-Windows/main.o main.cpp
mkdir -p dist/Release/Cygwin-Windows
i686-pc-mingw32-g++ -E    -o dist/Release/Cygwin-Windows/cppapplication_3 build/Release/Cygwin-Windows/main.o 
i686-pc-mingw32-g++: warning: build/Release/Cygwin-Windows/main.o: linker input file unused because linking not done
make[2]: Leaving directory '/cygdrive/c/Users/user/Documents/NetBeansProjects/CppApplication_3'
make[1]: Leaving directory '/cygdrive/c/Users/user/Documents/NetBeansProjects/CppApplication_3'


BUILD SUCCESSFUL (total time: 1s)

-c
标志不是一个附加标志,它是IDE用来告诉编译器将源文件(例如
main.cpp
)编译成目标文件(例如
main.o
)的基本标志之一。它也不用于发出警告消息的命令

但是,另一个标志是
-E
标志,您可以看到它在调用
g++
时都被使用。根据说明,这是
-E
标志的作用:

预处理阶段结束后停止;不要正确运行编译器。输出格式为 预处理源代码的一部分,发送到标准输出

不需要预处理的输入文件将被忽略

您看不到预处理的源代码,因为IDE提供的
-o
选项告诉它将其放入文件中。如果查看Windows/main.o中的
build/Release/cygw
,您会发现它是一个文本文件,包含通过预处理器传递源代码的结果。然而,它实际上应该是一个二进制文件,是在目标文件中编译代码的结果


因此,希望解决方案是显而易见的,从附加选项中删除
-E
标志。

这个-E选项很奇怪。man:“-E在预处理阶段之后停止;不要正确运行编译器。”c选项是正常的。比如看啊。。。我想知道为什么主文件不会产生错误,如果是C++代码在预处理器之后。它应该是链接器的不兼容输入!?