小编ato*_*ice的帖子

ld-linux.so以什么顺序搜索共享库?

当ld-linux解析符号时,它以特定顺序搜索共享库,并在找到具有匹配符号的共享库时停止.

是什么决定了它在图书馆中搜索的顺序?如果未解析的符号在主程序或另一个共享库中,它会有所不同吗?

如何在不调用ldd之类的外部程序的情况下以编程方式确定搜索顺序?

linux linker shared-libraries

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

是否有一种异步信号安全的方式来读取 Linux 上的目录列表?

SUSv4未在其异步信号安全函数列表中列出 opendir、readdir、closedir 等。

有没有一种安全的方法从信号处理程序读取目录列表?

例如,是否可以“打开”目录并以某种方式取出原始目录列表?如果是这样,“read”返回什么样的数据结构?

或者也许在 Linux 上有某些系统调用是异步信号安全的,即使 SUSv4 / POSIX 不需要它可以使用?

linux asynchronous signals

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

Linux:从32位用户模式程序中检测64位内核(长模式)

检测32位用户模式程序是否在64位内核上运行(即系统是否处于"长模式")的最佳和最可靠的方法是什么?如果可能的话,我宁愿不调用外部程序(或者必须加载任何内核模块).

注意:我想检测是否正在使用64位内核(或者实际上,CPU是否处于长模式),而不仅仅是因为存在64位处理器(/proc/cpuinfo告诉我但不是64位)能力正在被使用).

如果uname编译为32位或者如果setarch i686使用,则内核伪造32位处理器.

linux kernel 32-bit mode

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

调试堆栈值损坏的好方法

什么是调试堆栈值损坏的好方法。在我的程序中,有时在返回对文件描述符进行关闭的方法后,此指针的地址会更改。我调试了几个小时的程序,但找不到问题。

找出改变此指针地址的有效方法是什么?当我在此指针上手动添加监视时,不会发生错误。当我尽可能减少代码时,仍然会发生错误。我尝试了Valgrind,但未发现任何早期堆栈损坏。

我设法检测到何时发生错误,我以64位模式编译了代码。此地址从0xxxxxxx更改为0x1000000xxxxxxx。我在发生错误的方法中检查了这个地址,发现了地址更改的时间(有关此信息,请参见第一个段落)。

还有其他方法可以找出造成此问题的原因吗?

c++ linux debugging gcc stack-corruption

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

在方法声明中使用typedef但在方法定义中使用规范类型是合法的C++吗?

GNU C++(g ++ -pedantic -Wall)接受这个:

typedef int MyInt;

class Test
{
public:
    MyInt foo();
    void bar(MyInt baz);
}; 

int Test::foo()
{
    return 10;
}

void Test::bar(int baz)
{
}

int main(void)
{
    Test t;
    t.bar(t.foo());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它是合法的C++吗?其他编译器是否可能接受它?

c++ standards typedef g++ standards-compliance

3
推荐指数
2
解决办法
294
查看次数