小编com*_*por的帖子

MAC OS X上的Eclipse不检测LLVM工具链

我正在尝试使用eclipse来使用LLVM/Clang在MAC OSX上编译/调试C/C++应用程序.

我知道我已经正确安装了工具链,因为我可以使用makefile从终端编译它,并且在运行clang -v时我正确地获得了LLVM版本+安装目录.

我下载了eclipse C++(Mars)+的新副本,安装了LLVM支持插件并遵循: 无法为Eclipse CDT安装LLVM工具链

将install dir路径从clang -v输出复制到preferences-> c ++> LLVM中的LLVM部分,但似乎eclipse没有检测到工具链.

除非我取消选中"仅显示目标上支持的工具链"复选框,否则在创建新的C++项目时它不会显示为选项,当我取消选中它并在构建过程中为MACOS创建LLVM项目时,它会说:

未检测到"Toolchain"LLVM with Clang(MacOSX)".请参阅"C/C++开发用户指南","开始之前"如何安装工具链."

在手册中,它说的是安装Xcode以使工具链运行,这显然是因为它在终端上工作.

有任何想法吗 ?Eclipse如何检测工具链是否存在?

eclipse macos llvm-clang

28
推荐指数
1
解决办法
891
查看次数

成员初始化列表中的递增是否会生成未定义的行为?

这会导致未定义的行为吗?具体来说,初始化列表中的递增以及如何评估.

class Wrinkle {
public:
    Wrinkle(int i) : a(++i), b(++i), x(++i) {}
private:
    int a;
    int x;
    int b;
};
Run Code Online (Sandbox Code Playgroud)

成员声明和初始化程序列表之间的顺序差异是有意的,因为这是一个可以准确显示该差异的示例,因此请暂时忽略它.

c++ undefined-behavior language-lawyer ctor-initializer

24
推荐指数
2
解决办法
1247
查看次数

llvm/clang编译错误,内存耗尽

我正在尝试在我的ubuntu 14.04 vm上构建最新的llvm/clang代码,该代码具有2GB内存.

我所做的是一个正常的配置/ make过程,没有这两个命令的任何参数.

最后,我有以下错误:

llvm [4]:链接Debug + Asserts可执行clang
/usr/bin/ld:无法设置动态节大小:内存耗尽
collect2:错误:ld返回1退出状态
make [4]:***[/ home/alex /下载/ llvm_build/Debug + Asserts/bin/clang]错误1
make [4]:离开目录/home/alex/Downloads/llvm_build/tools/clang/tools/driver' make[3]: *** [driver/.makeall] Error 2 make[3]: Leaving directory/ home/alex/Downloads/llvm_build/tools/clang/tools'make
[2]:* [all] Error 1
make [2 ]:离开目录/home/alex/Downloads/llvm_build/tools/clang' make[1]: *** [clang/.makeall] Error 2 make[1]: Leaving directory/ home/alex/Downloads/llvm_build/tools'make
:***[all]错误1

有谁知道如何解决这个问题?

clang

23
推荐指数
2
解决办法
9323
查看次数

如何通过GCC和Clang(或一般的LLVM)缓解幽灵

微软/Qspectre为他们的MSVC编译器添加了一个方便的功能(虽然这似乎只是(试图)缓解目前的Specter v1),他们将随着时间的推移进行更新.从用户的角度来看,这是非常好的,只需启用该标志,您就可以获得他们存储的最新和最大的缓解.

使用LLVM和GCC看起来有点不同.我认为他们的缓解措施尚未正式发布.

LLVM应该获得一个-mretpoline编译器标志,通过返回trampolines缓解Specter v2以进行间接调用.

另一方面,GCC有补丁,可以添加三个编译器选项来减轻Spectre v2:

  • -mindirect-branch可以设置为thunk.我理解它的方式,这为每个间接调用创建了retpolines.
  • -mfunction-return可以设置为thunk.我想这会将每个函数返回使用这些retpolines,这可能是Skylake所必需的,因为这些处理器也可以预测回报?
  • -mindirect-branch-register 这使用寄存器而不是堆栈来存储间接调用的地址?

所以我很困惑.什么编译器选项可以减轻用户空间应用程序所需的内容和方式?

一般打开它们是个好主意吗?如果针对甚至没有任何推测性执行的处理器架构(如微处理器)进行编译,它们是否也会生成这些retpolines?

Spectre v1怎么样?

更新:

让我问更准确的问题:

  • 我对编译器选项的正确理解是什么?
  • GCC选项是应用于任何地方还是仅适用于具有推测执行的处理器?
  • LLVM选项是应用于任何地方还是仅应用于具有推测执行的处理器?
  • 这些选项究竟是什么减轻了(他们是否完全减轻了幽灵v2)?
  • 让我们考虑其他一切我要求的额外"奖励"问题"这些问题很有用,但对我的问题不是必不可少的.

security gcc clang spectre

14
推荐指数
1
解决办法
2267
查看次数

使LLVM内联函数库中的函数

我试图LLVM从库中内联函数.

我有一个LLVM bitcode文件(手动生成),我链接在一起llvm-link,我也有一个库(用C编写)编译成bitcode clang并存档llvm-ar.我设法将所有内容链接在一起并执行,但我无法设法LLVM从库中内联函数.关于如何做到这一点的任何线索?

linker llvm clang inlining llvm-ir

10
推荐指数
1
解决办法
1930
查看次数

向项目添加命令行参数

我的问题是有点类似这种SO却不尽相同.

HelloWorld用以下方法创建了一个程序:

add_executable( HelloWorld ${SRC} )
Run Code Online (Sandbox Code Playgroud)

当我生成项目文件(例如Visual Studio .sln文件或XCode .xcodeproj文件)时.我想点击运行按钮并在HelloWorld执行程序时传入一些命令行参数,如下所示:

./HelloWorld --gtest_filter=Test_Cases1*
Run Code Online (Sandbox Code Playgroud)

另请参阅此SO以了解如何在Visual Studio中完成此操作.

是否可以在CMakeList文件中执行此操作?如果没有,为什么?

cmake

9
推荐指数
3
解决办法
8172
查看次数

如何使用LLVM在Windows上为ARM编译C++程序?

目标仅使用LLVM在Windows上为ARM编译C++程序.

为什么 LLVM因为许可许可.

我开始怀疑我对LLVM的理解是否正确.

在主机上做

  1. 使用clang(前端)生成中间表示.该表示是独立于目标的.
  2. 使用llc(后端)生成目标汇编代码.
  3. 使用lld-link.exe生成可执行文件.

然后在目标机器上执行.

主机 Windows 10,64bit

目标机器用手臂皮质-57打开PX

该程序

int main(int argc, char* argv[]) 
{
    int x=41;
    x++;
    return x;
}
Run Code Online (Sandbox Code Playgroud)

我已经检查并编译了LLVM(使用Visual Studio 2015,发布版本,CPU = x64)

我的尝试

clang.exe -target arm -march=armv8-a -mcpu=cortex-a57 -mfloat-abi=hard  -emit-llvm -c -o main.bc  main.cpp
llc.exe -march=arm -mcpu=cortex-a57 -mattr=a57,armv8-a,v8 -meabi=gnu -o main.s main.bc
lld-link.exe /entry:main /machine:arm main.s
Run Code Online (Sandbox Code Playgroud)

错误

lld-link.exe: error: main.s: unknown file type
Run Code Online (Sandbox Code Playgroud)

然后我尝试在Windows上执行前端步骤,在arm机器上执行后端操作.

clang.exe -target arm -march=armv8-a -mcpu=cortex-a57 -mfloat-abi=hard  -emit-llvm -c -o main.bc  main.cpp
llc.exe -march=arm -mcpu=cortex-a57 -mattr=a57,armv8-a,v8 …
Run Code Online (Sandbox Code Playgroud)

c++ arm cross-compiling arm64

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

如何根据使用的功能自动选择最小的cmake版本?

例如,我想要指定C++标准CMakeLists.txt:

set_property(TARGET tgt PROPERTY CXX_STANDARD 98)
Run Code Online (Sandbox Code Playgroud)

但是这只有在cmake 3.1.3之后才可用.不幸的是我仍然可以在第一行写CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
Run Code Online (Sandbox Code Playgroud)

我怎样才能确定我指定了正确的要求(3.1.3而不是2.8)?

cmake

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

找不到stdio.h

我正在使用macOS.

我正在尝试构建mozilla-central的代码.

运行该命令时./mach build,编译步骤中的构建失败.以下是相关的堆栈跟踪:

stack backtrace:
 0:20.24    0:        0x10436b5ff - std::sys::unix::backtrace::tracing::imp::unwind_backtrace::hed04c7a1477ef1e3
 0:20.24    1:        0x10434499d - std::sys_common::backtrace::print::h336400f22676933f
 0:20.24    2:        0x104373bd3 - std::panicking::default_hook::{{closure}}::h0d6700a02d682978
 0:20.24    3:        0x10437395c - std::panicking::default_hook::h90363c6d6ac04260
 0:20.24    4:        0x1043742fb - std::panicking::rust_panic_with_hook::h81c4f3add25e6667
 0:20.24    5:        0x1043740ce - std::panicking::continue_panic_fmt::hfa057b7c1de88179
 0:20.24    6:        0x104374020 - std::panicking::begin_panic_fmt::hd1123702300ea9f2
 0:20.24    7:        0x1035f4e6d - build_script_build::build_gecko::bindings::write_binding_file::h2d9a397b93e6a614
 0:20.24    8:        0x1035f651c - build_script_build::build_gecko::bindings::generate_bindings::ha066bc11b076e01d
 0:20.24    9:        0x1043808fe - __rust_maybe_catch_panic
 0:20.24   10:        0x1035eea9f - std::panicking::try::hcbd901ede6e8004c
 0:20.32   11:        0x1035e335c - <F as alloc::boxed::FnBox<A>>::call_box::h638a7c5eb8c94414
 0:20.33   12:        0x104373037 - std::sys_common::thread::start_thread::h78b1dd404be976ad
 0:20.33   13:        0x1043436c8 - std::sys::unix::thread::Thread::new::thread_start::h27c6becca8cf44e0 …
Run Code Online (Sandbox Code Playgroud)

macos

9
推荐指数
3
解决办法
6658
查看次数

NetBeans 8.2 Clang C++项目尝试使用gdb而不是lldb进行调试

我使用内置的"Clang"工具集在NetBeans中创建了一个简单的C++应用程序项目.Clang设置似乎没问题(所有指向LLVM):

C编译器:/ usr/bin/clang
C++编译器:/ usr/bin/clang ++ ...
调试器命令:/ usr/bin/lldb

我的项目设置将"工具集"设置为:"CLang(默认)".

当我尝试调试项目时,GDB调试器被解雇(当然由于最新Mac系统上已知的gdb问题而失败,这是我切换到LLVM的原因之一)我得到:

启动调试器...
启动gdb
...
GDB意外停止,返回0

我试图强制Debug命令在Debug项目设置中使用lldb,但无济于事.使用"Attach debugger ..."时也很奇怪,我只能看到我安装的所有GDB调试器但没有lldb(见下面的截图).

我错过了什么设置?

截图:

在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述

c++ debugging macos netbeans

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