2012-06-06 3 views
0

Я использую poco для загрузки и разгрузки библиотек. Все работает отлично на windws, но в Linux он не работает по вызову функции poco::ClassLoader::unloadLibrary(libraryName). Он просто попадает в эту функцию, и он никогда не выходит, и он не генерирует исключение. У меня есть еще одна библиотека .so, и она работает отлично.Ошибка загрузки библиотеки Linux с помощью poco

Я знаю, что вы не можете сказать мне точную причину, почему это происходит, но это могло бы помочь мне, если бы я знал, каковы возможные причины этого, и, может быть, есть какой-то инструмент, который мог бы помочь мне разобраться в этом? Thanks

+0

Вы пытались получить источники и подключить отладчик, чтобы вы могли видеть точное место, где оно блокируется? – Paranaix

+0

У меня нет debbuger для Linux в настоящее время, мне нужно что-то найти, похоже, нет другого способа понять это: S – Jonhtra

+0

shouldnt gdb будет установлен на большинстве дистрибутивов linus автоматически? Если его нет в вашей системе, попробуйте 'sudo apt-get install gdb' – Paranaix

ответ

0

Может быть, некоторые ресурсы будут освобождены и освобождены. Есть ли шанс, что poco отслеживает созданные объекты?! Это может быть из-за блокировки или состояния, которое метод разгрузки ожидает, когда произойдет разблокировка. Вы можете использовать профилировщик памяти для проверки тех объектов, которые они не освобождают.

+0

Вот что мне удалось выяснить: 1. Перед разгрузкой разделяемой библиотеки я использовал sleep (60), поэтому я могу проверить, какие общие библиотеки загружены в моем процесс 2. Мне удалось уловить какое-то исключение из poco function unloadLibrary, поэтому в блоке catch я разместил бесконечный цикл. 4. Начал свою программу, и до того, как poco :: unloadLibrary называется, у меня было время проверить, есть ли моя общая библиотека, загруженная lsof -p , и она была там 5. Через одну минуту я проверил ее еще раз , и его больше не было Итак, он выгружен, хотя poco выбрасывает исключение ... Я проверю, что такое исключение – Jonhtra

+0

Он бросает Poco :: SystemException, но я не вижу сообщение. Когда я пытаюсь распечатать его с помощью своей системы отладки, он сработает, и это произойдет, если я попытаюсь распечатать сообщение в терминале. Если я просто поймаю исключение и ничего не делаю, у меня нет проблем, и библиотека выгружается, но мне не нравится, когда я улавливаю исключение и игнорирую его ... – Jonhtra

Смежные вопросы