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

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

我已经提高了内存(free -m现在报告我在我的exe文件加载到gdb时有大约120 MB空闲时间)并且我仍然收到相同的消息。

任何关于还有什么可能导致这个&我能做些什么来解决它?

有帮助吗?

解决方案

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

其他提示

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

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

Object* instance = new Object();

// the rest of the file

但是我认为dlopen的东西完全无关紧要。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top