0

我有一些用于测试的 c++ 代码,其中第一行是对 dlopen 的调用,以尝试加载我的共享对象。在点击此行时,我收到以下错误:

Terminate called after throwing an instance of std::bad_alloc: 
   what() : St9bad_alloc

我增加了内存(free -m 现在报告说,当我的 exe 加载到 gdb 中时,我有大约 120 MB 的空闲空间),但我仍然收到相同的消息。

任何人对其他可能导致此问题的任何想法以及我可以做些什么来解决它?

4

3 回答 3

4

看看C++ dlopen mini HOWTO,希望对您有所帮助。

于 2009-07-29T13:20:33.130 回答
2

我的猜测是 dlopen 与它无关。dlopen() 是一个 C 语言函数,它不能抛出异常。实际上可以抛出它的是共享对象中的初始化函数,例如,您分配给静态对象的表达式。例如,如果你在你正在加载的共享对象中写这个,它可能会因为 bad_alloc 而崩溃:

// dso.cpp start
#include <dso.h>

Object* instance = new Object();

// the rest of the file

但我想,dlopen 的东西完全无关紧要。

于 2009-09-01T21:06:31.277 回答
0

可能是因为它找不到所有依赖项。

将目录更改为应用程序所在的目录。
然后在您尝试加载的共享库上使用 nm (与您在代码中使用的路径相同)。
这将显示任何缺少的依赖项。

于 2009-07-29T17:33:05.460 回答