Развертывание приложения C, использующего библиотеку PCRE - PullRequest
3 голосов
/ 28 августа 2009

Я написал приложение на C, которое использует библиотеку PCRE.Все работает на моем собственном компьютере.Однако, когда я копирую двоичный файл на другой компьютер и запускаю его, он выдает следующую ошибку:

/ libexec / ld-elf.so.1: общий объект "libpcre.so.0" не найден,требуется myapp

Я знаю, что, вероятно, смогу заставить его работать, установив библиотеку PCRE на целевой компьютер.Однако мне интересно, есть ли более удобный способ сделать это?(просто копирование нескольких файлов lib?)

Я пытался скопировать файл libpcre.so.0, но он не работал.

Любая помощь приветствуется!Спасибо,

Ответы [ 3 ]

2 голосов
/ 28 августа 2009

Как сказал @hacker, вы должны либо установить PCRE на целевой машине, либо использовать статическую библиотеку (libpcre.a вместо libpcre.so) на машине для разработки. Это также может означать, что вам нужно собрать PCRE со статической библиотекой, и вам нужно будет использовать правильные параметры времени компиляции для загрузки статической библиотеки. Один из относительно простых способов сделать это - указать /usr/lib/libpcre.a в командной строке компилятора. В идеале, вы также должны избегать включения -lpcre в командную строку - конечно, вы бы хотели, чтобы статическая библиотека появлялась раньше разделяемой библиотеки.

Возможно, ваша копия не выполнена из-за проблем с символическими ссылками. Вы обычно ссылаетесь на файл, такой как:

/usr/lib/libpcre.so

но это символическая ссылка на версионную библиотеку, такую ​​как:

/usr/lib/libpcre.so.0

Или это может работать наоборот. Если вы использовали tar для копирования, возможно, вы скопировали символическую ссылку.

В идеале, вы устанавливаете PCRE в системный каталог, но для этого требуются права суперпользователя. Вы также должны быть осторожны, чтобы не перезаписывать более новую версию PCRE более старой версией. Кроме того, вы не должны заставлять пользователей задавать переменную среды LD_LIBRARY_PATH (или ее эквиваленты) или заставлять их использовать программу настройки (ld.so.conf?).

2 голосов
/ 28 августа 2009

Лучше либо установить его, либо связать статически. Первый, конечно, легче на ресурсы. Наилучшим способом обеспечения совместимости будет создание пакета для целевой системы с указанием всех зависимостей (зависит от дистрибутива, конечно).

0 голосов
/ 28 августа 2009

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

LD_LIBRARY_PATH=. ./your_program

Проверьте Библиотека программ. Как

...