2012-01-22 2 views
0

Может ли кто-нибудь дать представление или способ отладки, почему ltdl не загружает мою библиотеку? Как вы можете видеть из частичного выхода strace, он успешно открывает библиотеку, затем сообщает file not found, а затем переходит к успешной загрузке другой библиотеки, построенной таким же образом. Как я могу отладить это? Я долгое время искал Google и не нашел полезных способов отладки.libtool, не загружающий библиотеку

open("server/modules/smtp.la", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("server/modules/smtp.so", O_RDONLY) = 3 
getcwd("/home/david/Documents/workspace/dvnmon", 128) = 39 
1327209900.751672 3602 Failed to open server/modules/smtp: file not found 
open("server/modules/snmp.la", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("server/modules/snmp.so", O_RDONLY) = 3 
getcwd("/home/david/Documents/workspace/dvnmon", 128) = 39 
open("/etc/ld.so.cache", O_RDONLY)  = 3 
open("/usr/lib64/libnetsnmp.so.15", O_RDONLY) = 3 
open("/usr/lib64/libcrypto.so.1.0.0", O_RDONLY) = 3 
open("/lib64/libz.so.1", O_RDONLY)  = 3 
1327209900.800507 3602 Plugin CSNMPMonitor interface version 0.1 loaded 

ответ

3

lt_dlopen() сообщает FILE_NOT_FOUND всякий раз, когда это не удается загрузить динамическую библиотеку. Это может произойти, даже если файл существует.

Я бы сначала сравнил выход ldd server/modules/smtp.so и ldd server/modules/snmp.so. Может быть, у одного из них есть недостающая зависимость?

Вы также можете попробовать export LD_DEBUG=all (см. man ld.so).

Также непонятно из вашего вопроса, являются ли файлы в server/modules/ фактически модулями Libtool. Если да, то почему нет файлов *.la? Эти файлы могут указывать зависимые библиотеки, которые должны быть загружены первыми.

+0

Прохладный спасибо, что именно мне нужно. 18996: \t server/modules/smtp.so: ошибка: ошибка поиска символа: неопределенный символ: _ZTI11CSMTPServer (фатальный) Файлы .la не найдены, потому что Im символизирует все модели в одном каталоге и по какой-то причине символические ссылки на файлы .la не работают, но по-прежнему не удается загрузить smtp, если я укажу его на реальные файлы или скопирую их в этот каталог. Отсутствующий символ - один из моих, который связан с использованием полезных файлов .a, чтобы разбить программу и, очевидно, оставив этот символ в то время, когда родительская программа скомпилирована –

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