2017-01-09 4 views
0

фон вопроса: У меня есть библиотека, скажем mylib.so который включает в себя старый Libpng. Теперь (из-за последних политик Google Play) я должен использовать новый libpng; но это может быть сложно, поскольку библиотека была скомпилирована давно, и может потребоваться очень много времени, чтобы собрать все необходимые библиотеки со старой версией ... и так далее.Удаление библиотеки включены в общую библиотеку

Вопрос:

Можно ли «удалить» определенные записи из файла mylib.so, так что я могу затем связать оба mylib.so и новый libpng.so из моих приложений, и все будет хорошо работать (очевидно, если libpng обратно совместим с ранее связанным внутри mylib.so)?

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

Дополнительный вопрос (не основной, но я хотел бы понять): если mylib.so включает в себя старый Libpng и связать как к mylib.so и новый libpng ... что происходит? Я имею в виду, что компоновщик позволяет мне связать 2 библиотеки, вероятно, с похожими именами экспортированных символов ... но это немного запутывает ...

+0

Является ли зависимость версией или неверсифицированной? 'readelf' может вам это сказать. Если он неверующий, вам не нужно ничего делать, он должен просто работать. –

+0

Политики Google Play кажутся довольно строгими, они не хотят, чтобы старый _libpng_ присутствовал в вашем приложении .... по этой причине я пытался устранить, испортил :-) или сделать что-то, чтобы преодолеть эту проблему, не имея recompile _mylib.so_ – Prak

+0

1) Это, по-видимому, не относится к одному из разных языков C или C++. 2) Похож на проблему XY.Вы shoudl обновите свою программу/lib, чтобы использовать новый libpng; даже ** iff ** интерфейс не изменился, семантика может. Может быть, вы можете написать обертку lib. 3) Messing с libpng - очень плохая идея, так как это может нарушить другой код в системе. 4) Неясно, чего вы действительно хотите. Что значит «конкретные записи»? – Olaf

ответ

1

Возможно ли «удалить» определенные записи из файла mylib .so,

Номер

Большинство UNIX систем (за исключением AIX) считают .so в качестве ссылок продукта в окончательным, и никакой дальнейшей модификации не возможно.

если mylib.so включает в себя старую libpng и ссылку на mylib.so и новую libpng ... что происходит?

Ваша программа обнаруживает неопределенное поведение, нарушая одно правило определения. Обычно это просто сбой, но все возможно. Например, это может привести к повреждению стека и вызвать сбои только один раз в час или один раз в день. Такие ошибки сложнее всего найти. Только не сделайте это.

+0

Спасибо, я пробовал всю ночь напролет, с readelf и objdump, но в конце я понял, что это не слишком очевидно ... по крайней мере, не с просто доступными командами. Если кто-то не дает решения, это кажется правильным решением: нет решения ... :-) – Prak

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