叮当声:警告:-lgtest:“链接器”输入未使用

Posted

技术标签:

【中文标题】叮当声:警告:-lgtest:“链接器”输入未使用【英文标题】:clang: warning: -lgtest: 'linker' input unused 【发布时间】:2013-10-24 17:07:14 【问题描述】:

我正在使用 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

我不知道为什么,但是该命令包含两次某些属性,当然会两次发出相同的警告。这是我在项目属性中所做的: 如果我删除附加选项,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 错误吗?

感谢您的帮助。

【问题讨论】:

-lgtest 是链接 gtest 库的链接器指令。它不应该出现在CMAKE_CXX_FLAGS 中,我希望它(或代表它的变量)出现在target_link_libraries 调用甚至add_executable 中。而且我不使用 NetBeans,但我希望这个选项属于“链接器”菜单而不是“C++ 编译器”菜单。 @Fraser 你是对的。我编辑了我的帖子以删除set 命令中的-lgtest。感谢您的评论[+1]。 那么-lgtest 现在从“附加选项”中消失了吗?您是否在“库”部分添加了 gtest 作为依赖项? @Fraser 我在您的帮助下解决了这个问题,非常感谢。我刚刚发布了我自己的答案和解释。如果其他人和我有同样的问题,他们会更容易解决。 【参考方案1】:

我要感谢@Fraser 的帮助,他帮助我找到了删除警告的方法。基本上,不要在 C++ 编译器部分的附加选项中写入-pedantic-errors -lgtest -pthread,这会给出重复警告,这些属性应该在项目的链接器部分中。

因此,C++ 编译器部分中的 Additional Options 为空。现在,我可以毫无问题地使用 -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。

【讨论】:

以上是关于叮当声:警告:-lgtest:“链接器”输入未使用的主要内容,如果未能解决你的问题,请参考以下文章

ASmack 上的叮当声 - XMPP

铿锵声“你好,世界!” windows中的链接错误

铿锵声:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)而实现?

无法使用解析库:解析链接器警告:文件是为不受支持的文件格式构建的

使用编译器/链接器进行 C++ 代码清理

Python 音频只会让窗户发出叮叮当当的声音