小编Gab*_*ern的帖子

gdb 引用的“系统提供的 DSO”是什么?

我正在运行 gdb,并且set verbose on试图理解收到的消息之一:

Reading symbols from system-supplied DSO at 0x7ffff7ffb000...(no debugging symbols found)...done.
Run Code Online (Sandbox Code Playgroud)

是什么system-supplied DSO?经过一番搜索,我认为这DSO可能代表“动态共享对象”。但我仍然不明白 gdb 在这里做什么以及如何解决找不到调试符号的问题(或者如果它甚至很重要)。

另外,我正在调试的程序正在使用 llvm-gcc 进行编译,并应用了 LLVM pass。我认为这会影响 gdb 的行为,但我不确定如何影响。

所以本质上我的问题是 gdb 打印的消息意味着什么,它是否可能导致问题,如果是的话,有什么建议可以帮助 gdb 找到调试符号。

gdb llvm-gcc

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

CMake在安装过程中遵循符号链接

简短的问题: 在安装过程中复制文件时,是否可以将CMake设置为遵循符号链接?

详细信息:我正在使用CMake构建和安装LLVM。在我的LLVM源代码树的include目录中,我有一个指向另一个针对LLVM开发的子项目的符号链接。一切似乎都正常,除了我注意到当我运行“ cmake install”时它复制了include目录而不遵循符号链接。我的问题是我的符号链接具有相对路径(因为它位于git repo中)。因此,当符号链接被复制(而不是跟随并复制内容)时,它们不再指向正确的文件。例如,我要dsa -> ../../llvm-poolalloc/include/dsa/ 在安装时复制此链接的内容,而不是仅复制链接。但是我还没有找到执行此操作的cmake标志。

我意识到这可能不是构建项目的想法,但是我正在使用已经存在的东西,最好不要更改太多目录结构,因为与我一起工作的其他人都希望这样做这样。因此,我认为能够遵循符号链接也许可以解决我的问题,而不必重新构建整个构建系统。但是我愿意接受其他建议,以寻求更好的方法来完成我想做的事情。

请注意,我正在Linux(Ubuntu 10.04)上使用LLVM 2.6(我从llvm-gcc一起从源代码进行编译)。另外,我正在使用CMake 2.8版。

编辑:

这是与安装指令相关联的CMakeLists.txt文件的源代码:

install(DIRECTORY include
  DESTINATION .
  PATTERN ".svn" EXCLUDE
  PATTERN "*.cmake" EXCLUDE
  PATTERN "*.in" EXCLUDE
  PATTERN "*.tmp" EXCLUDE
  )

install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include
  DESTINATION .
  )
Run Code Online (Sandbox Code Playgroud)

包含目录的目录列表为:

dsa -> ../../llvm-poolalloc/include/dsa/
llvm
llvm-c
poolalloc -> ../../llvm-poolalloc/include/poolalloc
Run Code Online (Sandbox Code Playgroud)

我想要的是dsapoolalloc复制目录,而不仅仅是复制符号链接。我在符号链接中不使用绝对路径的原因是我将它们检入了git repo。因此,我的绝对路径与在项目中进行回购的其他人有所不同。

cmake llvm

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

python中的site-packages是什么,如果你不是root用户,你可以安装/使用它们吗?

我正在尝试将Linux中的lldb安装到我系统上的主目录中(我没有root访问权限)并且我遇到了一个试图创建子目录的步骤的问题/usr/lib/python2.6/site-packages

我在Makefile中找到了设置此变量的行,它是:

PYTHON_DEST_DIR := $(DESTDIR)/$(call realpath,$(shell python -c 'import sys; print sys.exec_prefix')/lib/python$(shell python -c 'import sys; print sys.version[:3]')/site-packages)
Run Code Online (Sandbox Code Playgroud)

所以我不能在configure sciprt中指定它,但是我可以更改Makefile以使文件被复制到我的主目录中的某个位置.但我真的不明白site-packages我会指定python应该在这些文件的某个替代位置查找的内容或方式.这是可能的,还是有任何我想做的变通办法?

python

5
推荐指数
2
解决办法
5929
查看次数

使用 clang 而不是 gcc 编译时的程序段错误

摘要:当我-mcmodel=large在使用 clang 编译时设置标志时,访问线程本地存储时我的应用程序段错误。使用 gcc 编译时不会发生这种情况。这是叮当声的错误还是我做错了什么?

详情

以下代码段在设置-mcmodel标志时使用clang编译时崩溃,但使用gcc编译时运行良好

#include <stdio.h>
#include <pthread.h>

__thread int tlsTest;

int main(int argc, char **argv) {
  printf("&tlsTest is %p\n", &tlsTest);
  tlsTest = argc;
  printf("tlsTest is %d\n", tlsTest);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译时:clang test.c -pthread -mcmodel=large结果是:

&tlsTest is 0x7fd24262c6fc
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

但是:gcc test.c -pthread -mcmodel=large结果是:

&tlsTest is 0x7f1cf785c6fc
tlsTest is 1
Run Code Online (Sandbox Code Playgroud)

该程序在编译时也能正常工作: clang test.c -pthread

我阅读了以下有关 mcmodel 的链接,但我不确定这与我观察到的段错误有何关系。请注意,此问题-mcmodel=medium也发生在,但不发生在-mcmodel=small.

这是 clang/llvm …

clang compiler-flags

5
推荐指数
0
解决办法
603
查看次数

缓存和暂存器内存

有人可以解释高速缓存和暂存器之间的区别吗?我目前正在学习计算机体系结构。

caching arm computer-architecture

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

如何使用克隆系统调用分配新的TLS区域

问题的简短版本:clone如果我想为我正在创建的线程分配一个新的TLS区域,我需要将什么参数传递给x86_64 Linux系统上的系统调用.

长版:

我正在研究一个研究项目和我正在尝试的东西我想使用clone系统调用而不是使用来创建线程pthread_create.但是,我也希望能够使用线程本地存储.我现在不打算创建多个线程,所以我可以为我使用克隆系统调用创建的每个线程创建一个新的TLS区域.

我正在查看手册页clone,它有关于TLS参数标志的以下信息:

CLONE_SETTLS (since Linux 2.5.32)
   The newtls argument is the new TLS (Thread Local Storage) descriptor.
   (See set_thread_area(2).)
Run Code Online (Sandbox Code Playgroud)

所以我查看了手册页,set_thread_area并注意到以下内容看起来很有希望:

 When  set_thread_area()  is  passed  an  entry_number  of -1, it uses a 
 free TLS entry. If set_thread_area() finds a free TLS entry, the value of
 u_info->entry_number is set upon return to show which entry was changed.
Run Code Online (Sandbox Code Playgroud)

但是,在尝试了一些之后,似乎set_thread_area在我的系统中没有实现(在x86_64平台上的Ubunut 10.04).当我运行以下代码时,我收到一条错误消息:set_thread_area() failed: Function not implemented

#include <stdlib.h> …
Run Code Online (Sandbox Code Playgroud)

linux pthreads system-calls

4
推荐指数
1
解决办法
2324
查看次数

Windows 8 SDK中的DirectX

摘要:应该从针对Windows 8的应用程序中删除directX包含文件吗?

细节:

我是Windows的新手,我正在尝试使用Visual Studio 2012在Windows 8上编译NVIDIA SDK(如果可能的话).编译时我收到了一条错误信息:Cannot open include file: 'd3dx9.h': No such file or directory.

我已经阅读了DirectX SDK的位置?文章,但我对它的说法感到困惑.

假设我不关心Windows 7和只是想测试在Windows 8(忽略地铁现在)的桌面应用程序,我需要保持包括如#include <d3dx9.h>#include <d3dx11.h>那些在NVIDIA SDK的应用程序,或者我应该删除这些包括?如果我确实保留了我需要安装的内容,以便找到文件.

directx winapi

4
推荐指数
1
解决办法
3729
查看次数

volatile和__volatile__之间的区别

使用gcc编译的C代码volatile和之间有什么区别__volatile__

我正在查看Linux源代码,我注意到有些地方使用__asm__ __volatile__其他地方asm volatile而其他人使用__asm__ volatile.

我没见过__volatile__没用__asm__,虽然我已经看到volatile在其他各种地方使用过.

什么__volatile__volatile做有什么区别?如果是这样的话是什么?或者,如果没有,__volatile__有时使用的原因是什么?

c gcc volatile

3
推荐指数
1
解决办法
2194
查看次数

处理器功能的 CMake 测试

我想知道 CMake 是否可以像使用配置脚本运行测试一样运行测试。具体来说,我想测试我正在编译的系统是否支持 rdtscp 指令。

我使用的是 Linux,如果我使用配置脚本,我可以执行以下操作:

cat /proc/cpuinfo | head -n 19 | tail -1 | grep -c rdtscp
Run Code Online (Sandbox Code Playgroud)

0如果 rdtscp 功能不存在,这会告诉我,或者1如果存在的话。然后我可以用它来确定是否#define RDTSCP。我想知道是否可以用 CMake 做类似的事情,即使它不完全可移植(我只在 Linux 下运行,不使用 Visual Studio 等)。

linux cmake

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

Ruby:将ARGV转换为字符串

问题:是否有一种简单的方法可以在Ruby中打印出一个由空格分隔的元素?

细节:

我想使用Ruby to Benchmark命令并运行命令.就像是:

 script.rb ./command_name arg1 arg2 arg3 ...
Run Code Online (Sandbox Code Playgroud)

例如:

 script.rb ls -lh
Run Code Online (Sandbox Code Playgroud)

应该跑ls -lh.我尝试这样做:

require 'benchmark'
puts Benchmark.measure{system(ARGV.to_s)}
Run Code Online (Sandbox Code Playgroud)

(注意忽略这个问题的基准,我刚才包括因为我正在使用它的那个)但是这不起作用因为ARGV被打印而没有空格.例如ls -lh变成ls-lh.显然,我可以通过解析ARGV数组并在循环中的元素之间插入空格来创建自己的字符串.但我认为有一个更优雅的Ruby解决方案,但我还没有能够找到一个,所以我想知道是否有人有建议.

ruby

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

创建具有相同名称的结构和类

简介:如果声明a struct和a class具有相同的名称会发生什么.

细节:

我正在审查一些代码,我看到了这样的警告:

warning: struct 'foo' was previously declared as a class
Run Code Online (Sandbox Code Playgroud)

在用clang编译时,还有几个地方clang添加了注释:

foo.h:29:1: note: did you mean struct here?
class foo;
^~~~~
struct
Run Code Online (Sandbox Code Playgroud)

显然,拥有一个结构和一个具有相同名称的类不是一个好的编码实践.看起来发生的事情是开发人员正在编写他自己的类,并使用了一个已经在他包含的另一个文件中使用的名称,他没有注意到.

但是,我的问题是编译器是否能够区分声明为的变量class foo和那些变量struct foo

编辑:

实际上发生的事情是开发人员正在使用他创建class fooclass bar那个.我认为在此期间class foo宣布的地方已改为a struct bar.这就是代码编译的原因.所以我想我的问题的答案是,struct并且class在声明对象时可以互换.我仍然认为一直使用它们是个好主意.

c++

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