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

4
我正在使用CLang++ 3.3编译器和Linux Mint 14上的Netbeans 7.3 IDE开发C++11应用程序。我使用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 如果我删除了“Additional options”,gtest就不能工作了,命令行变成了这样:clang++ -c -g -Wall -std=c++11 ...。我该怎么做才能避免属性重复呢?
即使使用了cmake,我也在Clang中得到了警告(这次只出现了一次 :))。我还使用GCC 4.7进行了测试,并没有收到任何警告。这是我在一个cmake文件中为GCC使用的命令行:
set (CMAKE_CXX_FLAGS                "-Winline -Wall -Werror -pedantic-errors -pthread -std=c++11")

因此,Clang似乎是问题所在。有人知道这个警告来自哪里以及如何移除它吗?这是一个Clang的bug吗?
感谢您的帮助。

1
-lgtest是一个链接器指令,用于链接gtest库。它不应该出现在CMAKE_CXX_FLAGS中,我希望它(或代表它的变量)出现在类似target_link_libraries调用或者add_executable中。而且我不使用NetBeans,但我希望这个选项应该属于"Linker"菜单而不是"C++ Compiler"菜单。 - Fraser
@Fraser 你是对的。我编辑了我的帖子,删除了 set 命令中的 -lgtest。感谢你的评论[+1]。 - Gabriel L.
1
“-lgtest”现在从“附加选项”中消失了吗?您是否已将“gtest”添加为“库”部分的依赖项? - Fraser
@Fraser,在你的帮助下,我解决了问题,非常感谢。我刚刚发布了自己的答案并附上了解释。如果其他人遇到和我一样的问题,这将更容易地帮助他们解决。 - Gabriel L.
1个回答

4
我希望感谢@Fraser的帮助,他帮助我找到了消除警告的方法。基本上,不要在C++编译器选项中写入-pedantic-errors -lgtest -pthread,因为这会导致重复警告,而这些属性应该在项目的链接器部分中。
因此,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都适用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接