Ошибка на dlopen: St9bad_alloc - PullRequest
       45

Ошибка на dlopen: St9bad_alloc

0 голосов
/ 29 июля 2009

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 29 июля 2009

Взгляните на C ++ dlopen mini HOWTO , надеюсь, это поможет.

2 голосов
/ 02 сентября 2009

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

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

Object* instance = new Object();

// the rest of the file

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

0 голосов
/ 29 июля 2009

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

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

...