我在RedHat下使用NetBeans。我有几个打开的项目,它们组合在一起,形成一个命令行可执行文件和一个共享对象"插件"。混合中还有两个静态库。这一切都很好,很好。
我注意到,当我"清洁和建造"可执行文件和共享对象,编译器选项也在链接器行上表示。 la:
g++ -O2 -Wall -c -fmessage-length=0 -c -g -Werror -DDEBUG -DDEBUG_2 -I/usr/include -I/usr/include/c++/4.4.7/x86_64-redhat-linux -I/usr/include/c++/4.4.7 -I../ITGUtilities -MMD -MP -MF "build/Debug/GNU-Linux-x86/LocalCache.o.d" -o build/Debug/GNU-Linux-x86/LocalCache.o LocalCache.cpp
然后在编译行中(为简洁起见编辑):
g++ -O2 -Wall -c -fmessage-length=0 -fPIC -o dist/Debug/GNU-Linux-x86/pam_plugin.so build/Debug/GNU-Linux-x86/pam_plugin.o -L... -lpam -l... -shared -fPIC
g++: build/Debug/GNU-Linux-x86/pam_plugin.o: linker input file unused because linking not done
我认为我有一套相当通用的项目配置。我确实设置了-O2 -Wall -c -fmessage-length=0
编译器选项,但除了NetBeans应用的默认值之外,没有为链接器提供的选项。
对于可执行文件和插件项目,我可以转到Properties > Linker > Additional Options
并展开[...]
以查看NB认为它将适用的内容。这不会显示编译选项,但实际构建会应用它们。
它没有进行链接步骤,我假设这是因为编译器选项。这很奇怪。
想法?
答案 0 :(得分:1)
不要将-c
选项添加到不运行链接器的编译器选项中。无论如何,只要编译就会根据需要添加它。