我有一些我用于测试的c ++代码,其中第一行是在尝试加载我的共享对象时调用dlopen。点击此行后,我收到以下错误:
Terminate called after throwing an instance of std::bad_alloc:
what() : St9bad_alloc
我已经提高了内存(free -m现在报告我在我的exe文件加载到gdb时有大约120 MB空闲时间)并且我仍然收到相同的消息。
任何关于还有什么可能导致这个&我能做些什么来解决它?
答案 0 :(得分:4)
看看C++ dlopen mini HOWTO,希望有所帮助。
答案 1 :(得分:2)
我的猜测是dlopen与它无关。 dlopen()是一个C语言函数,它不能抛出异常。实际上可以抛出的是共享对象中的初始化函数,例如,分配给静态对象的表达式。例如,如果您在正在加载的共享对象中写入此内容,则可能会因bad_alloc而崩溃:
// dso.cpp start
#include <dso.h>
Object* instance = new Object();
// the rest of the file
但是我认为dlopen的东西完全无关紧要。
答案 2 :(得分:0)
可能是因为它无法找到所有依赖项。
将目录更改为应用程序所在的目录 然后在您尝试加载的共享库上使用nm(与代码中使用的路径相同) 这将显示任何缺少的依赖项。