2009-07-29 5 views
0

У меня есть код C++, который я использую для тестирования, в котором первая строка является вызовом dlopen в попытке загрузить мой общий объект. После попадания этой линии я получаю следующее сообщение об ошибке:Ошибка в dlopen: St9bad_alloc

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

я увеличил память (бесплатно -m теперь сообщает, что у меня есть ~ 120 МБ бесплатно, когда мой ехе загружаются в БГДЕ), и я все еще получаю то же самое сообщение.

Какие-либо идеи о том, что еще может быть причиной этого &, что я могу сделать, чтобы решить эту проблему?

ответ

0

Возможно, это связано с тем, что он не может найти все свои зависимости.

Сменить каталог в каталог, в котором находится приложение.
Затем используйте nm в общей папке, которую вы пытаетесь загрузить (тот же путь, что и в коде).
Это покажет любые недостающие зависимости.

2

Я полагаю, что dlopen не имеет к этому никакого отношения. dlopen() является функцией языка C и не может генерировать исключение. То, что на самом деле может вызвать его, - это функции инициализации в ваших общих объектах, например, выражения, которые вы назначаете своим статическим объектам. Например, если вы пишете это в общем объекте вы загружаете, это может привести к сбою с bad_alloc:

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

Object* instance = new Object(); 

// the rest of the file 

Но dlopen материал совершенно не имеет значения, я полагаю.