【发布时间】:2015-06-14 06:50:28
【问题描述】:
从 App Store 更新到命令行工具 6.3 后,包括 <vector> 或 <iterator> 在内的内部包含 <__debug> 的程序会导致找不到文件错误,如下所示。 cpp 没什么意思,但包含在其中一个包含的标头中。
c++ -O3 -I/Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers -L/Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/build/binaries/clusterStaticLibrary /Users/farleylai/Documents/dev/git/ESMS/Optimizer/build/StreamIt/FIR/511/512/combined_threads.cpp -o streamit -lcluster -lpthread -lstdc++
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/build/StreamIt/FIR/511/512/combined_threads.cpp:9:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/node_server.h:22:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/thread_info.h:20:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/connection_info.h:19:
/Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/socket_holder.h:43:25: warning: delete called on 'mysocket' that is abstract but has non-virtual destructor
[-Wdelete-non-virtual-dtor]
if (!is_mem_socket) delete sock;
^
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/build/StreamIt/FIR/511/512/combined_threads.cpp:9:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/node_server.h:22:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/thread_info.h:26:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/vector:265:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/__bit_reference:15:
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:641:10: fatal error: '__debug' file not found
#include <__debug>
^
有解决这个问题的想法吗? 我不希望指定任何额外的 C++ 标志。
谢谢。
PS:macOS 10.10.3 上的 MacBook Pro
更新:
Apple 在其开发者论坛上验证了该问题。在命令行工具 6.2 中,包含 __debug 的条件如下,但在 6.3 中没有。
#ifdef _LIBCPP_DEBUG
# include <__debug>
#else
# define _LIBCPP_ASSERT(x, m) ((void)0)
#endif
而 libcxx 的人们谈到了移除 __debug here 的保护措施。感觉 __debug 在 OSX 上从来不存在。
【问题讨论】:
-
你能发布一个最小的例子吗?以及您正在使用的编译器(我假设是 clang++)?
-
一种解决方法是在相应文件夹中触摸一个空的__debug,但副作用很难说。
-
#include <__debug> int main(){}为我工作(使用clang++ test.cpp编译),我刚刚升级到 10.10.3 -
更新命令行工具后,目录下没有__debug。您是否也更新了命令行工具 6.3? /Library/Developer/CommandLineTools/usr/include/c++/v1/__debug
-
我也没有
__debug,但是我发布的最小程序编译得很好。是的,我也更新了命令行工具。