std::function, Clang 6.0 & MSVC (10.0017134.12) - 可能的 ABI 错误或必需的编译器标志
std::function, Clang 6.0 & MSVC (10.0017134.12) - possible ABI bug or required compiler flags
如果我创建一个简单的库(使用 CMake 构建(:
福.H
#pragma once
#include <functional>
void foo(std::function<void()> handler);
傅.cpp
#include "foo.h"
void foo(std::function<void()> handler)
{
handler();
}
然后创建一个单独的 CMake 项目来编译可执行文件:
#include "foo.h"
#include <cstdlib>
#include <iostream>
int main()
{
foo([&]()
{
std::cout << "hello" << std::endl;
});
return EXIT_SUCCESS;
}
然后使用 Release 或 RelWithDebInfo(记住我使用的是 CMake(中的 MSVC(使用最新的平台 SDK 10.0.17134.12(编译库,并使用 Clang 6 编译可执行文件(与 Visual Studio 17.7 捆绑在一起的最新 Windows 平台 SDK 不支持 Clang 5 https://blogs.msdn.microsoft.com/vcblog/2018/05/07/announcing-msvc-conforms-to-the-c-standard/(也使用 Release 或 RelWithDebInfo,然后我得到由std::function
析构函数触发的堆损坏。
为了可靠地触发堆损坏,我可以使用gflags
.
gflags -p /enable "myexe.exe" /full
它在以前的平台SDK上与Clang 5配合使用良好(标准Clang可从LLVM下载,而不是Microsoft的版本(。我假设这是一个 ABI(或类似(问题或错误。需要一段时间才能将这一切提炼下来并获得最低限度的可验证复制。有没有人对从这里拿走它有任何建议?
据我所知,这似乎确实是一个 ABI 问题,所以我报告了一个错误:
https://bugs.llvm.org/show_bug.cgi?id=39962
更新:
该错误已在 https://reviews.llvm.org/rL328386 中修复,并包含在 Clang 7.0.0 中。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- 链接器错误:未定义对"Reference_Genome::seq[abi:cxx11]"的引用
- 尝试从头开始实现Leetcode的FizzBuzz多线程问题。收到"libc++abi.dylib: terminating"错误
- MRB_THROW会导致libc++abi.dylib中的错误
- std::function, Clang 6.0 & MSVC (10.0017134.12) - 可能的 ABI 错误或必需的编译器标志
- 涉及STD :: __ CXX11名称空间的链接器错误 - 双ABI问题
- 在 Ubuntu 15.10 上使用 g++-4.9 编译时出现运行时错误 [abi:cxx11]
- visual MSVC编译器错误C2688:Microsoft C++ABI角大小写问题
- STLport 错误:'__cxa_demangle' 不是提升库'abi'的成员
- boost 是否使用 C++11 "inline namespaces" 来避免运行时出现 ABI 不兼容错误?
- 使用abi遵从性检查器时出现错误的原因是什么?