clang:警告:-lgtest:'链接器'输入未使用

时间:2013-10-24 17:07:14

标签: c++ netbeans clang compiler-warnings googletest

我正在用C ++ 11开发应用程序,我的编译器是CLang ++ 3.3。我也在Linux Mint 14上使用Netbeans 7.3 IDE。

我的所有测试都是使用GoogleTest(gtest-1.6.0)完成的,除了本文标题中提到的警告外,几乎所有内容都正常。

以下是netbeans执行的命令行示例:

clang++ -pedantic-errors -lgtest -pthread   -c -g -Wall -std=c++11 -pedantic-errors -lgtest -pthread -MMD -MP -MF build/Debug/CLang-Linux-x86/_ext/1802678175/main.o.d -o build/Debug/CLang-Linux-x86/_ext/1802678175/main.o ../GIT_CryptoCode/src/main.cpp

我不知道为什么,但该命令包含两次属性,当然会给出相同的警告两次。这就是我在项目属性中所做的: Properties of the project : C++ Compiler 如果我删除了附加选项,则gtest不起作用,命令行变为如下所示:clang++ -c -g -Wall -std=c++11 ...。我该怎么做才能让某些属性重复?

好吧,即使使用cmake,我也会收到Clang的警告(这次出现一次:))。我也用GCC 4.7进行了测试,但没有得到任何警告。这是我在GCC的cmake文件中使用的命令行:

set (CMAKE_CXX_FLAGS                "-Winline -Wall -Werror -pedantic-errors -pthread -std=c++11")

因此,Clang似乎是个问题。有谁知道这个警告来自何处以及如何删除它?这是一个Clang bug吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

我要感谢@Fraser的帮助,帮助我找到删除警告的方法。基本上,不是在C ++编译器部分的附加选项中编写-pedantic-errors -lgtest -pthread而是提供重复警告,这些属性应该在项目的链接器部分中。 enter image description here

因此,C ++编译器部分中的附加选项保留为空。现在,我可以毫无问题地使用-Werror属性。

另外,在cmake文件中,行

target_link_libraries(${Project_Name} ${GTEST_BOTH_LIBRARIES})

将gtest库链接到项目。因此,

中不需要-lgtest
set (CMAKE_CXX_FLAGS   "-Winline -Wall -Werror -pedantic-errors -pthread -std=c++11")
对于GCC和Clang来说都是