现在是 2020 年,C++20 以及期待已久的 C++ 模块功能即将到来。但是在看了一些关于 CppCon 的演讲后,我发现 C++ 模块处于一个奇怪的地方,尤其是对于 Linux 包管理器(pacman、apt、emerge 等...)
据我所知,C++ 模块是
我的问题是,在所有滚动发布发行版中,编译器一直在更新,用户可能有自己的编译器版本。目前可以只更新编译器或更新libstdc++. 但是对于模块,似乎建议libstdc++在编译器更新时必须更新。
当编译器更新时,包管理器将如何处理更新,例如 STL?我不认为为每个版本的编译器构建每个版本的 STL 模块是可行的。用户必须构建自己的 STL 模块也不是一个好主意。
c++ dependency-management package-management c++20 c++-modules
我正在调试 OpenCL 应用程序的崩溃。我试图使用 asan 来确定问题的根源。但是后来我发现打开asan并重新编译后,我的应用程序找不到任何OpenCL设备。简单地添加-fsanitize=address到编译器选项使我的程序无法使用 OpenCL。
通过进一步测试,我发现内存清理器不适用于 OpenCL。
为什么会这样?如何在 OpenCL 中使用 asan?
编辑:一个最小的例子
#include <CL/cl.hpp>
#include <vector>
#include <iostream>
int main() {
std::vector<cl::Platform> platforms;
cl::Platform::get(&platforms);
if(platforms.size() == 0) std::cerr << "in asas\n";
else std::cout << "compiled normally\n";
}
Run Code Online (Sandbox Code Playgroud)
编辑2:
cl::Platform::getCL_SUCCESS 正常返回。获取平台的过程中没有错误。
还有一些关于我的设置的信息。
GPU:GTX 780Ti
驱动程序:418.56
OpenCL SDK:Nvidia OpenCL / POCL 1.3,带 CPU 和 CUDA 后端
编译器:GCC 8.2.1
操作系统:Arch Linux(内核 5.0.7 x64)
我正在使用 cppcoro 在 C++ 中试验协程。但是 Address Sanitizer 似乎总是不高兴我正在泄漏内存。为什么?我从来没有使用原始的 new/delete 分配任何东西,也从来没有造成与shared_ptr.
#include <cppcoro/task.hpp>
#include <cppcoro/sync_wait.hpp>
#include <iostream>
class A {
public:
A() { std::cerr << "A ctor\n"; }
~A() { std::cerr << "A dtor\n"; }
};
int main()
{
auto getACoro = []() -> cppcoro::task<std::shared_ptr<A>> {
co_return std::make_shared<A>();
};
auto foo = [getACoro]() -> cppcoro::task<> {
co_await getACoro();
co_return;
};
auto coro = [&foo]() -> cppcoro::task<> {
co_await foo();
};
cppcoro::sync_wait(coro());
}
Run Code Online (Sandbox Code Playgroud)
编译: g++ -std=c++20 -focorutines main.cpp -o main …
我有一个库是使用cppcoro编写的,并希望将它与 ASIO 一起使用。但是每当我尝试co_spawn从所述库中使用协程时。Boost 抱怨 awaitable 类型不正确。
例如:
#include <asio/io_context.hpp>
#include <asio/coroutine.hpp>
#include <asio/co_spawn.hpp>
#include <asio/detached.hpp>
#include <asio/awaitable.hpp>
#include <cppcoro/task.hpp>
cppcoro::task<int> foo()
{
co_return 1;
}
int main()
{
asio::io_context ctx;
asio::co_spawn(ctx, foo(), asio::detached);
ctx.run();
}
Run Code Online (Sandbox Code Playgroud)
Boost 抱怨cppcoro::task<int>并非源自asio::awaitable
asio_cppcoro.cpp: In function ‘int main()’:
asio_cppcoro.cpp:15:43: error: no matching function for call to ‘co_spawn(asio::io_context&, cppcoro::task<int>, const asio::detached_t&)’
15 | asio::co_spawn(ctx, foo(), asio::detached);
| ^
In file included from /usr/include/asio/co_spawn.hpp:467,
from asio_cppcoro.cpp:3:
/usr/include/asio/impl/co_spawn.hpp:199:1: note: candidate: ‘template<class Executor, …Run Code Online (Sandbox Code Playgroud) c++ ×4
c++20 ×3
asio ×1
boost-asio ×1
c++-modules ×1
coroutine ×1
debugging ×1
memory-leaks ×1
opencl ×1