小编com*_*por的帖子

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
查看次数

Microsoft示例的此移动构造函数似乎具有冗余代码

开发人员的MSDN页面包含以下代码段:

// Move constructor.  
MemoryBlock(MemoryBlock&& other) : _data(nullptr), _length(0)  
{  
   std::cout << "In MemoryBlock(MemoryBlock&&). length = "   
             << other._length << ". Moving resource." << std::endl;  

   // Copy the data pointer and its length from source object.  
   _data = other._data;      // Assginment 1
   _length = other._length;  // Assignment 2

   // Release the data pointer from the source object so that  
   // the destructor does not free the memory multiple times.  
   other._data = nullptr;  
   other._length = 0;  
}
Run Code Online (Sandbox Code Playgroud)

有什么用的_data(nullptr) …

c++ move-constructor c++11

7
推荐指数
1
解决办法
248
查看次数

在Clang中设置为默认C++ 11

LLVM C++编译器完全支持C++ 11标准.有没有办法将C++ 11设置为默认标准,而不是-std=c++11每次都添加编译器标志?我尝试将CCXFLAGS环境变量设置为-std=c++11,但没有运气.

standards clang c++11

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

如何将LLVM_CONFIG环境变量指向llvm-config的路径

我正在尝试numba在OS X Mountain Lion上安装.我曾尝试过这种pip install方式,但没有工作,所以我从GIT存储库下载了zip文件.在尝试安装numba时,我意识到我需要先做LLVM.

我下载并解压缩llvm到该Download文件夹中.README指令是:"如果您的LLVM安装在非标准位置,请首先将LLVM_CONFIG环境变量指向相应llvm-config可执行文件的路径."; 与运行python setup.py install命令时获得的RunTimeError兼容的消息.

我的问题是我不明白该怎么做才能使LLVM_CONFIG环境变量指向相应的llvm-config可执行文件.

有帮助吗?谢谢

python osx-mountain-lion numba

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

通过 cmake 链接 libc++ 时 libc++abi 的链接问题

我正在尝试C++使用 LLVM/Clang 3.7.0 构建一个简单的(“hello world”)程序,该程序是根据工具链的源代码构建的libc++,使用命令行:

\n\n
clang++ -std=c++14 -stdlib=libc++ -fno-exceptions hello.cpp\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,我收到以下错误:

\n\n
/usr/bin/ld: warning: libc++abi.so.1, needed by /bulk/workbench/llvm/3.7.0\n/toolchain4/bin/../lib/libc++.so, not found (try using -rpath or -rpath-link)\n/bulk/workbench/llvm/3.7.0/toolchain4/bin/../lib/libc++.so: undefined reference to `__cxa_rethrow_primary_exception\'\n/bulk/workbench/llvm/3.7.0/toolchain4/bin/../lib/libc++.so: undefined reference to `__cxa_decrement_exception_refcount\'\n/bulk/workbench/llvm/3.7.0/toolchain4/bin/../lib/libc++.so: undefined reference to `std::out_of_range::~out_of_range()\'\n[...]\n
Run Code Online (Sandbox Code Playgroud)\n\n

LD_LIBRARY_PATH设置工具链的安装目录已添加到我的工作中PATH中:

\n\n
export PATH=$PATH:/bulk/workbench/llvm/3.7.0/toolchain4/bin/\n
Run Code Online (Sandbox Code Playgroud)\n\n

我上线了Ubuntu GNU/Linux 14.04,并且尚未从任何存储库安装任何 LLVM 或 Clang 相关的软件包。

\n\n

根据libc++ 文档

\n\n
\n

在 Linux 上,libc++ 通常只能与 \xe2\x80\x98-stdlib=libc++\xe2\x80\x99 一起使用。然而,某些 libc++ 安装需要用户自己手动链接 libc++abi。如果在使用 …

linker abi llvm clang libc++

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

如何使用 CMAKE 为交叉编译配置设置特定的 CMAKE_C_OUTPUT_EXTENSION?

我正在尝试设置一个工具链文件,以便与 CMake 3.12.0 版本进行交叉编译。

我的目标文件.obj与 Windows 和.oUNIX 中的扩展名不同。

因此,我将我的设置CMAKE_LANG_OUTPUT_EXTENSION.src.

不幸的是,这个变量被CMakeCInformation.cmake这些行中的文件覆盖:

# some compilers use different extensions (e.g. sdcc uses .rel)
# so set the extension here first so it can be overridden by the compiler specific file
if(UNIX)
  set(CMAKE_C_OUTPUT_EXTENSION .o)
else()
  set(CMAKE_C_OUTPUT_EXTENSION .obj)
endif()
Run Code Online (Sandbox Code Playgroud)

如果我注释这些行,我的配置将起作用并且将使用正确的对象扩展。

我认为我的工具链文件已配置为 CMake 不会执行其内部编译器检查。

这是我的工具链文件条目行的外观:

SET(CMAKE_SYSTEM_NAME Generic)

INCLUDE(CMakeForceCompiler)

SET(CMAKE_C_COMPILER_FORCED TRUE)
SET(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
#other compiler configuration lines here 
SET(CMAKE_C_OUTPUT_EXTENSION .src)
SET(CMAKE_ASM_OUTPUT_EXTENSION .o)
SET(CMAKE_C_OUTPUT_EXTENSION_REPLACE 1)
SET(CMAKE_ASM_OUTPUT_EXTENSION_REPLACE 1)
Run Code Online (Sandbox Code Playgroud)

我知道 …

c++ build cmake cmake-modules

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

了解 LLVM IR 中的位广播

我试图理解从 C++ 程序生成的 LLVM IR

int add(int *x);
int func()
{
        int T;
        T=25;
        return add(&T);    
}
Run Code Online (Sandbox Code Playgroud)

生成的IR为:

define i32 @_Z4funcv() local_unnamed_addr #0 {
entry:
  %T = alloca i32, align 4
  %0 = bitcast i32* %T to i8*
  call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %0) #3
  store i32 25, i32* %T, align 4, !tbaa !2
  %call = call i32 @_Z3addPi(i32* nonnull %T)
  call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %0) #3
  ret i32 %call
}
Run Code Online (Sandbox Code Playgroud)

我不明白这一行%0 = bitcast i32* %T …

llvm llvm-ir

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

如何在 cmakelist.txt 中打印变量内的值

我在最近的项目中使用 CMake,我想确认设置了正确的路径

set(_protobuf_include_path -I . -I ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR})
Run Code Online (Sandbox Code Playgroud)

我曾经在终端中message检查_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR但不打印任何内容的值

message( STATUS ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR} ) # no output for this
Run Code Online (Sandbox Code Playgroud)

我的意图是构建 Grpc1.14.1,它与 protobuf 有依赖关系,所以我下载了 protobuf 3.6.01,并且 grpc 和 protobuf 都保存在同一目录 ( home/user/src) 下。

构建时出现此错误

google/protobuf/stubs/common.h: No such file or directory
 #include <google/protobuf/stubs/common.h>
Run Code Online (Sandbox Code Playgroud)

所以我protobuff.cmake在目录中打开gRPC/cmake并更改了protobuf根路径

if(NOT PROTOBUF_ROOT_DIR)
  #set(PROTOBUF_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/protobuf)
  set(PROTOBUF_ROOT_DIR ../../ThirdParty/protobuf)
[...]
Run Code Online (Sandbox Code Playgroud)

这样做之后,我仍然遇到同样的问题。

linux cmake

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

Kotlin代码如何编译成本机代码?

Kotlin / Native的官方文档指出Kotlin / Native

..是Kotlin编译器基于LLVM的后端。

据我所理解:

  • Kotlin编译器(kotlinc)从您的Kotlin源文件生成.class文件(带有Java字节码)。
  • 通用LLVM后端(与Kotlin不相关)采用LLVM IR并将其转换为二进制代码。

因此,Kotlin / Native是否将Java字节码转换为LLVM IR?如果是这样,声明Kotlin / Native是LLVM后端是否正确?Kotlin代码是否可以编译到LLVM IR中?如果不是,那么每个编译步骤的输入和输出是什么?(例如:Kotlin-(kotlinc)-> Java字节码-(LLVM后端->本机二进制)

这篇博客文章指出Kotlin前端编译器(我认为它是指kotlinc)产生了我从未读过的Kotlin IR。

Kotlin编译器只有一个前端,但有多个后端,具体取决于您用来构建代码的插件。Kotlin / Native插件将Kotlin中间表示(IR)转换为本机代码(即,机器可执行的代码)。

这个报价正确吗?

它告诉您Java字节码,本机代码和JavaScript的编译过程相同。您编译Kotlin代码,然后有3个后端编译器提供预期的输出格式(Java字节码,JavaScript,二进制代码)。

最终平台特定的二进制文件是否包含本地Kotlin标准库,或者它是动态链接的?

kotlin kotlin-native

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

未找到 CMAKE 所需的标头 sys/stat.h

我正在尝试配置使用 CMake 的 bcl2fastq 程序。我找到了触发此错误消息的行

file:bcl2fastq/src/cmake/cxxConfigure.cmake
############## content ####################
..... # ignoring many lines
bcl2fastq_find_header_or_die(HAVE_SYS_STAT_H  sys/stat.h)
......# more lines following
Run Code Online (Sandbox Code Playgroud)

错误信息:

-- time.h found as /usr/include/time.h
-- unistd.h found as /usr/include/unistd.h
CMake Error at cmake/macros.cmake:80 (message):
  Required header sys/stat.h not found.
Call Stack (most recent call first):
  cmake/cxxConfigure.cmake:41 (bcl2fastq_find_header_or_die)
  cxx/CMakeLists.txt:34 (include)
Run Code Online (Sandbox Code Playgroud)

在我的系统上,sys/stat.h位于

/usr/include/x86_64-linux-gnu
Run Code Online (Sandbox Code Playgroud)

在过去,我添加的符号链接/usr/includesys/stat.h,其修补的问题。有人可以通过修改 CMake 文件来建议更好的方法吗?

深入挖掘,我macros.cmakecxxConfigure.cmake包含宏定义的同一目录中找到了该文件:

#   
# Macro to find libraries, with support for static-only search
#
macro(bcl2fastq_find_header_or_die …
Run Code Online (Sandbox Code Playgroud)

c++ cmake

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