小编Bot*_*tje的帖子

在 libc++ 中使用 double 调用 std::from_chars 时出现编译错误

我有一个小代码如下:

int main() {
    double d;
    const char* str = "26.50";
    std::from_chars(str, str + strlen(str), d);
    std::cout << d;
}
Run Code Online (Sandbox Code Playgroud)

此代码在 libstdc++ 中按预期工作,但在 libc++ 12.0.0 中失败并出现以下错误:

int main() {
    double d;
    const char* str = "26.50";
    std::from_chars(str, str + strlen(str), d);
    std::cout << d;
}
Run Code Online (Sandbox Code Playgroud)

这是 libc++ 的错误吗?或者我错过了什么?我应该说,如果我将数据类型从 更改为 ,这段代码就可以double工作int

c++ libc++

10
推荐指数
0
解决办法
2086
查看次数

如何从 Apple 切换到 Homebrew 安装的 clang?

我正在尝试在 R 上安装一个名为 XBART 的软件包。我使用 RStudio 作为 IDE,并在控制台中安装:'install_github("jingyuhe/XBART")'。该包需要 C++ 编译器,我使用的是 clang++。但是,我不断收到以下错误:

clang:错误:不支持的选项“-fopenmp”

通过搜索,Apple clang 似乎不支持 OpenMP,这就是我收到此错误的原因。我尝试安装外部 clang('brew install llvm')和 OpenMP('brew install libomp')。不过,它仍然使用 Apple 版本的 clang 进行下载。如何让 R 使用此外部编译器而不是 Apple 版本进行下载?

c++ macos r

9
推荐指数
1
解决办法
2万
查看次数

使用 gRPC 的 CMake 找不到 gRPCTargets.cmake

我在grpc cpp helloworld使用cmake. 我建立并安装grpccmake最初,然后用make直接。

我发现这个问题过去是由其他人提出的,已解决。
它似乎没有解决,我打开了一个新问题为它,但我觉得我需要一段时间才能得到一些帮助,所以我在这里。

原始问题的 OP 为他的FindGRPC cmake 模块提供了一种解决方法,但我不确定如果gRPCTargets.cmake仍然丢失,这将如何提供帮助。
FindGRPC.cmake进入了我的 cmake 模块路径,但没有任何变化。

错误是这样的:

CMake Error at /usr/local/lib/cmake/grpc/gRPCConfig.cmake:8 (include):
  include could not find load file:

    /usr/local/lib/cmake/grpc/gRPCTargets.cmake
Call Stack (most recent call first):
  CMakeLists.txt:73 (find_package)


-- Using gRPC 1.20.0
-- Configuring incomplete, errors occurred
Run Code Online (Sandbox Code Playgroud)

我希望能够轻松地grpc从我的 cmake 项目中使用(使用find_package(gRPC CONFIG REQUIRED)

编辑:

运行cmake时出现grpc此错误:

gRPC_INSTALL will …
Run Code Online (Sandbox Code Playgroud)

cmake grpc

8
推荐指数
1
解决办法
4353
查看次数

jemalloc / jeprof 根据 lg_prof_interval 显示地址而不是函数名称

我正在尝试调试一些供应商提供的 JNI/本机代码中的内存泄漏,并且像许多人一样,从这里开始:https: //technology.blog.gov.uk/2015/12/11/using-jemalloc - 找到内存泄漏的根源/

我发现如果我运行:

export MALLOC_CONF=prof:true,lg_prof_interval:30,lg_prof_sample:17
Run Code Online (Sandbox Code Playgroud)

然后运行我的应用程序,然后运行jeprof ...命令生成 .gif 我可以看到导致泄漏的 JNI 函数名称(这很好!)。

我尝试更改lg_prof_interval:30lg_prof_interval:25更频繁地生成 .heap 文件,但我发现我之前提到的 JNI 函数名称已被地址替换(0x000123...)。我没有做任何其他更改,并且已经进行了双重和三次检查,运行 withlg_prof_interval:30让我可以看到生成的 .gif 中的函数名称,但lg_prof_interval:25没有。

我想使用的原因lg_prof_interval:25是因为我需要使用遭受内存泄漏的应用程序的精简版本重新运行分析,但我担心使用 2^30 字节将永远需要,因此永远不会看到 .heap文件。

我见过类似的问题,答案建议安装 dbg 版本的 jdk,但我很难理解为什么这可能是我的情况的原因。

提前谢谢了。

TLDR:可以看到函数名称,lg_prof_interval:30但不能lg_prof_interval:25

profiling memory-leaks jemalloc

6
推荐指数
0
解决办法
1051
查看次数

函数调用顺序的副作用

考虑以下程序:

#include <iostream>

int f() {
    std::cout << 0;
    return 1;
}

int main() {
    std::cout << f();
}
Run Code Online (Sandbox Code Playgroud)

输出以下文本:

01
Run Code Online (Sandbox Code Playgroud)

但这是由标准保证的吗?发生以下情况(不一定按顺序)

  • (A) 副作用std::cout(此处未观察到)
  • (二)价值评价std::cout
  • f()(C) (打印0)的副作用
  • (四)价值评价f()
  • (E) 操作者的副作用<<(打印1
  • (六)<<经营者的价值评价

阅读cppreference上的评估规则顺序我设法找到以下内容:

  • 规则 2) 规定 (B) 和 (D) 发生在 (F) 之前。
  • 规则 19) (C++17) 规定 (A) 和 (B) 在 (C) 和 (D) 之前发生

我可以想象,有一条规则说函数的副作用发生在值返回之前,这意味着(C)发生在(D)之前。不过,我并不能百分百确定这是明确写在哪里的。也许规则 11)?

剩下的(E)我找不到它的序列规则。规则 2) 明确排除了序列顺序中的副作用,因此:

  • (E) 的规则是什么?
  • 这是否保证在其他可观察到的副作用 (C) 之后进行排序?

注意:我在讨论最近的 …

c++ language-lawyer c++17

6
推荐指数
0
解决办法
151
查看次数

无法从 com.android.aaptcompiler.ParsedResource@502699b7 提取资源

我在 Android Studio 中最近 6 小时遇到了这个问题。他们说我要提取资源文件,我还提取了 string.xml 文件中的文件

android android-studio

6
推荐指数
0
解决办法
9693
查看次数

在这种情况下,“忽略模板参数的属性”是什么意思?

我的任务是消除一个大型 C++ 项目中的警告,其中大部分警告不是我编写的,并且针对以下内容发出了更常见的警告之一:

std::unique_ptr<DIR, decltype(&closedir)> dir(opendir(dirToDelete.c_str()), closedir);
Run Code Online (Sandbox Code Playgroud)

警告是

ignoring attributes on template argument 'int (*)(DIR*) {aka int(*)(__dirstream*)}' [-Wignored-attributes]
std::unique_ptr dir(opendir(dirToDelete.c_str()), closedir);
Run Code Online (Sandbox Code Playgroud)

DIRopendir、 和closedir均在标准头文件中定义dirent.h。)

我知道这段代码的作用,并且它正在工作,但是警告是什么意思?编译器引用的被忽略的属性是什么?这意味着什么?

c++ gcc-warning

6
推荐指数
1
解决办法
471
查看次数

OpenGL调试,如何查看顶点着色器的结果

有没有一种方法可以在顶点着色器处理完顶点后查看顶点的最终位置(和其他属性),而无需依赖进一步的渲染?能够单独查看我的顶点着色器阶段的输入->输出将极大地帮助调试。

我使用Visual Studio 2015,如果它具有可用的调试实用程序(我也使用Nsight,但在这些行中找不到任何东西)

opengl debugging

5
推荐指数
1
解决办法
62
查看次数

按键混淆案例

背景

为屏幕投射开发一个基本的、开源的键盘和鼠标屏幕显示桌面应用程序,称为KmCaster

屏幕投射预览

该应用程序使用JNativeHook库来接收全局键盘和鼠标事件,因为 Swing 的鼠标侦听器仅限于接收针对应用程序本身的事件。

问题

当应用程序失去焦点时,用户界面会显示间歇性按键,而不是每次按键。然而控制台显示应用程序已收到每次按键。

代码

一个简短的、自包含的、可编译的示例:

import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;

import javax.swing.*;

import static java.util.logging.Level.OFF;
import static java.util.logging.Logger.getLogger;
import static javax.swing.SwingUtilities.invokeLater;
import static org.jnativehook.GlobalScreen.*;
import static org.jnativehook.keyboard.NativeKeyEvent.getKeyText;

public class Harness extends JFrame implements NativeKeyListener {

  private final JLabel mLabel = new JLabel( "Hello, world" );
  private int mCount;

  public void init() {
    getContentPane().add( mLabel );

    setDefaultCloseOperation( EXIT_ON_CLOSE );
    setLocationRelativeTo( null );
    setAlwaysOnTop( true );
    pack(); …
Run Code Online (Sandbox Code Playgroud)

java swing desktop-application jnativehook

5
推荐指数
1
解决办法
73
查看次数

数组元素默认初始化的顺序是否已定义?

默认初始化数组时,其元素默认初始化的顺序是 C++ 标准定义的吗?

\n

举个例子,下面的C++程序是否保证打印严格升序的内存地址?

\n
#include <iostream>\nstruct Foo{\n    Foo() {\n        std::cout << this << std::endl;\n    }\n};\nint main() {\n    delete[] new Foo[10];\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我在标准的 9.4.1 初始化器,常规下找到了以下内容:

\n
\n

7 默认初始化 T 类型的对象意味着:(...)

\n

(7.2)\xe2\x80\x94 如果 T 是数组类型,则每个元素都默认初始化。

\n
\n

我是否正确地假设这意味着它未指定,或者文档中的其他地方也没有对此进行澄清?

\n

这个答案声称它已经定义(根据(a)),但是(afaict)没有提供任何证据。

\n

请注意,我并不是试图在初始化之前引用数组本身(Can a (C/C++) array optimization reference itself?),而只是关心初始化顺序的可观察到的副作用。

\n

c++ arrays initialization language-lawyer default-initialization

5
推荐指数
1
解决办法
139
查看次数