我的 Bazel C++ 项目的 CI 构建最近崩溃了。该错误表明 HTTPS 下载失败http_repository:
INFO: Repository eigen instantiated at:
no stack (--record_rule_instantiation_callstack not enabled)
Repository rule http_archive defined at:
/private/var/tmp/_bazel_kstaley/efca2582089f638162aa9f6ccfe4282e/external/bazel_tools/tools/build_defs/repo/http.bzl:336:31: in <toplevel>
WARNING: Download from https://gitlab.com/libeigen/eigen/-/archive/56b3e3f3f8ca9972ca390c8296fde363bdab271c/eigen-56b3e3f3f8ca9972ca390c8296fde363bdab271c.tar.gz failed: class com.google.devtools.build.lib.bazel.repository.downloader.UnrecoverableHttpException GET returned 406 Not Acceptable
ERROR: An error occurred during the fetch of repository 'eigen':
java.io.IOException: Error downloading [https://gitlab.com/libeigen/eigen/-/archive/56b3e3f3f8ca9972ca390c8296fde363bdab271c/eigen-56b3e3f3f8ca9972ca390c8296fde363bdab271c.tar.gz] to /private/var/tmp/_bazel_kstaley/efca2582089f638162aa9f6ccfe4282e/external/eigen/eigen-56b3e3f3f8ca9972ca390c8296fde363bdab271c.tar.gz: GET returned 406 Not Acceptable
ERROR: /Users/kstaley/src/myrepo/library/utilities/BUILD:58:11: //library/utilities:mylibrary depends on @eigen//:eigen in repository @eigen which failed to fetch. no such package '@eigen//': java.io.IOException: Error …Run Code Online (Sandbox Code Playgroud) 我从这段代码开始:
void func1() {
char tmpfile[] = "/tmp/tmpXXXXXX";
mkstemp(tmpfile); // Note: mkstemp modifies the char array, cannot be const
...
}
void func2() {
char tmpfile[] = "/tmp/tmpXXXXXX";
mkstemp(tmpfile); // Note: mkstemp modifies the char array, cannot be const
...
}
Run Code Online (Sandbox Code Playgroud)
我想重构这个以取出共享"/tmp/tmpXXXXXX"常量.这是一个尝试:
constexpr char kTmpfile[] = "/tmp/tmpXXXXXX";
void func1() {
char tmpfile[] = kTmpfile;
mkstemp(tmpfile); // Note: mkstemp modifies the char array, cannot be const
...
}
void func2() {
char tmpfile[] = kTmpfile;
mkstemp(tmpfile); // Note: mkstemp …Run Code Online (Sandbox Code Playgroud) 我genrule在 Bazel 中有一个应该操作一些文件的文件。我想我没有通过正确的路径访问这些文件,所以我想查看 Bazel 创建的目录结构,以便我可以调试。
我echo在我的 genrule 中添加了一些语句,我可以看到 Bazel 在目录中工作/home/lyft/.cache/bazel/_bazel_lyft/8de0a1069de8d166c668173ca21c04ae/sandbox/linux-sandbox/1/execroot/。但是bazel运行完后,这个目录就没有了,所以无法查看目录结构。
如何防止 Bazel 删除其临时文件,以便我可以调试正在发生的事情?
我有一个np.float64值的上三角矩阵,如下所示:
array([[ 1., 2., 3., 4.],
[ 0., 5., 6., 7.],
[ 0., 0., 8., 9.],
[ 0., 0., 0., 10.]])
Run Code Online (Sandbox Code Playgroud)
我想将其转换为相应的对称矩阵,如下所示:
array([[ 1., 2., 3., 4.],
[ 2., 5., 6., 7.],
[ 3., 6., 8., 9.],
[ 4., 7., 9., 10.]])
Run Code Online (Sandbox Code Playgroud)
转换可以就地完成,也可以作为新矩阵进行。我希望它尽快。我如何快速做到这一点?
我想让我的 Bazel C++ 构建独立于/usr/include、/usr/local/include等。默认情况下,如本线程中所述,编译 C++ 程序时,其中的所有文件/usr/include都可用,而不仅仅是标准文件。
实现这一目标的最佳方法是什么?
一种选择是将标准头文件放入 tarball 中并通过 HTTP 将其托管在某个位置,然后添加并new_http_repository运行.gcc-nostdinc -isysroot
我有一个const uint8_t*我想要转换为一个char*期望a的接口char*.
最简单的方法是使用C风格的强制转换:
const uint8_t* aptr = &some_buffer;
char* bptr = (char*)aptr;
Run Code Online (Sandbox Code Playgroud)
但是,我们的内部样式指南(基于Google C++样式指南)禁止C样式转换.
另一种选择是这种怪异,我发现这是非常难以理解的:
char *cptr = reinterpret_cast<char*>(const_cast<uint8_t*>(aptr));
Run Code Online (Sandbox Code Playgroud)
我尝试的其他选项都无法编译:
char* dptr = reinterpret_cast<char*>(aptr);
char* eptr = const_cast<char*>(aptr);
char* fptr = static_cast<char*>(aptr);
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以使用C++样式转换来执行此转换而不嵌套两个单独的转换操作?