Как использовать другую версию библиотеки

0

У меня установлен libpng 1.12 (на Ubuntu apt-get) в каталоге /usr/lib. Я хочу использовать 1.14, поэтому я загрузил его, скомпилировал и установил в /usr/local/lib. Как я могу заставить мой компилятор/компоновщик использовать библиотеку из /usr/locla?

Я попытался сделать это "глупым" way- ссылкой на ссылку /usr/lib/libpng.so из /usr/lib/libpng12.so в /usr/local/lib/libpng.so. Программа компилируется и запускается (с LD_LIBRARY_PATH=/usr/local/lib), но есть предупреждение, в котором говорится, что она была скомпилирована с предыдущей версией и работает с более новой.

Как я могу правильно это сделать? (Я использую проект qmake на Ubuntu 12.04)

заранее спасибо

Теги:
linker
shared-libraries
qmake

2 ответа

0
Лучший ответ

Вам необходимо (1) скомпилировать (2) ссылку и (3) загрузить с использованием новой версии.

Чтобы скомпилировать новую версию, используйте -I/path/to/includes/of/new/version (возможно, -I/usr/local/include в вашем случае).

Для ссылки на новую версию используйте -L/path/to/libs/of/new/version linker flag (-L/usr/local/lib в вашем случае).

Существуют различные способы загрузки новой версии, самый простой - это, возможно, использовать флаг -rpath компоновщика. Если вы связываетесь с gcc или g++, используйте его следующим образом: -Wl,-rpath=/usr/local/lib. Если вы используете ld, используйте только -rpath=/usr/local/lib.

Не прикасаться к вещам в /usr/lib, вы будете сожжены после следующего обновления программного обеспечения, и вы можете нарушить существующее программное обеспечение.

Вам не нужно использовать LD_LIBRARY_PATH, если вы используете -rpath. Вы можете использовать тот или иной.

1

При связывании своего приложения вместо использования -lpng используйте /usr/local/libpng14.so или любое -lpng имя и путь, которые вы используете.

  • 0
    Просто "-lpng14" тоже должен работать. Но если вы делаете новую разработку, вы можете рассмотреть возможность использования libpng16, которая является текущей версией.
  • 0
    все ваши ответы хорошие. Намек Гленна самый простой, я полагаю, большое спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню