Вопрос по pcre, deployment, c – Развертывание приложения C, использующего библиотеку PCRE

3

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

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

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

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

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

Ваш Ответ

3   ответа
2

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

Как я могу связать pcre в статически? Я'Я довольно плохо при компиляции c / c ++ Dave
Там'Есть несколько способов. Вы можете связать все мысли статически, обеспечивая-static возможностьgcc или вы можете указать библиотеку libpcre.a вместо -lpcre (или что-то еще в вашей командной строке). На самом деле, это зависит от вашей строительной техники. Michael Krelin - hacker
0

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

LD_LIBRARY_PATH=. ./your_program

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

Да этоОдин из возможных способов. Но статическая компиляция кажется более идеальной для моей ситуации Dave
2

вы должны либо установить 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?).

Да =) это было решение. Файл lib должен быть помещен после файла .c. Спасибо! Dave
а ошибки что то типанеопределенная ссылка на `pcre_fullinfo '" Dave
используя Makefile:pastebin.com/d2cd7bd81 Dave
Установленный PCRE здесь 7.9I ' Dave

Похожие вопросы