У меня есть программа для нескольких процессов, запущенная на MIPS-процессоре с uclibc, и она скомпилирована с gcc 4.5.3. Для одного из процессов (это имя «tv») требуется связать с одной общей библиотекой (libtest.so), которая также написана мной. Процесс «tv» написан на C++, а libtest.so находится в C.Как отлаживать загрузку разделяемой библиотеки
Я также сбрасываю заголовок эльфа из libtest.so, он имеет как флаг PIC, так и CPIC, поэтому я думаю, что создание библиотеки это нормально.
Когда я пытаюсь запустить программу, все процессы запускаются нормально, за исключением процесса «tv». Сообщение об ошибке отсутствует. Когда я использую ps, чтобы проверить его статус, он стал зомби-процессом.
Я попытался следующий
Если удалить libtest.so из процесса связывания и удаления каких-либо ссылок на libtest.so, процесс «телевизор» может работать без какого-либо вопроса.
Если я удалю любую ссылку на libtest.so, но сохраняйте libtest.so в процессе компоновки, процесс «tv» все еще не запускается.
Я пытался использовать LD_DEBUG = all для отладки, но он не работает на моей плате, так как нет допустимого вывода.
Так что я думаю, что что-то пошло не так, когда я попытаюсь загрузить libtest.so, когда начинается процесс «tv». Но я не знаю, как отлаживать? Как мне узнать, вызывает ли какая-то часть libtest.so проблема?
Любое предложение приветствуется. Заранее спасибо.
Вы попробовали 'strace'? – mattn
Хм, очень интересный вопрос. У вас, похоже, огромное преимущество в том, что вы контролируете libtest, поэтому вы можете попытаться воспроизвести проблему с помощью простого процесса (не tv), а затем медленно вырезать все из libtest, пока проблема не исчезнет, а затем повторно добавьте до тех пор, пока вы не сможете точно определить проблему (стиль бинарного поиска). Если проблема не будет воспроизводимой * только * с tv и немодифицированным libtest.so, и в этом случае удачи? – Cameron
@mattn Я использовал strace и узнал, что получаю SIGBUS. Теперь я попытаюсь найти причину этого. Большое спасибо за предложение. – SSC