У меня установлен 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)
заранее спасибо
Вам необходимо (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. Вы можете использовать тот или иной.
При связывании своего приложения вместо использования -lpng
используйте /usr/local/libpng14.so
или любое -lpng
имя и путь, которые вы используете.