Сколько общих библиотек в max мы можем связать с приложением на C и в Linux? - PullRequest
1 голос
/ 19 декабря 2011

Я связал 14 библиотек и использовал API, представленные в библиотеках в моем приложении. но когда я запускаю свое приложение, я получаю ошибки во время выполнения, говоря "невозможно разрешить символ x в /lib/libxyz.so"

есть идеи?

Ответы [ 2 ]

3 голосов
/ 19 декабря 2011

У меня есть программа manydl.c на моей веб-страницы (для Linux), которая генерирует некоторый «случайный» код C во «временный» файл *.c, компилирует его в общий доступ *.so библиотеки, затем dlopen -s, что *.so, и повторите это много раз. Мне удалось заставить его генерировать и dlopen около ста тысяч *.so файлов.

Вы можете прочитать комментарии и попробовать их (в новом каталоге, поскольку он генерирует множество файлов *.c и *.so).

По сути, в Linux вы можете dlopen столько общих библиотек, сколько пожелаете . Единственным ограничением является адресное пространство процесса (а также другие ресурсы памяти), и вы не достигнете их до dlopen, то есть со многих сотен тысяч общих библиотек.

И, как ответил Mat , есть некоторые программы с множеством связанных динамических библиотек. Мой ежедневный браузер Google Chrome загружает 73 разделяемые библиотеки.

Короче, не волнуйтесь.

(Может случиться, что с большим количеством больших библиотек, особенно в C ++, вы можете получить значительное время запуска из-за перемещения и динамического связывания. Но сначала не беспокойтесь).

3 голосов
/ 19 декабря 2011

Если установлен фиксированный лимит, он равен way выше 16. Например:

$ ldd okteta | wc -l
66

и это приложение работает отлично.

Ваша проблемаскорее всего, вы создали исполняемый файл для другой версии этой библиотеки, чем та, на которую она ссылается во время выполнения, и некоторые символы были изменены (или удалены) с тех пор.до нужной версии (возможно, с помощью LD_LIBRARY_PATH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...