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

时间:2014-09-01 20:24:59

标签: 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/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)

1 个答案:

答案 0 :(得分:2)

-c标志不是附加标志,它是IDE用来告诉编译器将源文件(例如main.cpp)编译成目标文件的基本标志之一(例如。main.o)。它也没有用在给你警告信息的命令上。

然而,什么是附加标志是-E标志,您可以看到在g++被调用的两次使用。根据{{​​3}},这是-E标志的作用:

  

在预处理阶段后停止;不要正确运行编译器。输出是在表单中   预处理源代码,发送到标准输出。

     

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

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

所以希望解决方案显而易见,从其他选项中删除-E标志。