ошибка перемещения и распространение Linux sw - PullRequest
1 голос
/ 27 апреля 2011

Это моя цель: я разработал программное обеспечение для Linux, и мне нужно распространять его без исходного кода. Идея заключается в создании zip-файла, который содержит все необходимые элементы для запуска исполняемого файла. Пользователь загрузит zip-архив, распакует его, дважды щелкнет, и программное обеспечение запустится на любом компьютере под управлением Linux. Из-за причин, которые я не собираюсь объяснять, я не могу использовать deb / rpm / etc или установщик.

sw имеет следующие зависимости:

  1. некоторые библиотеки (написанные мной, которые зависят от OpenCV), скомпилированные с g ++, создающие файлы .a (т.е. статические библиотеки)
  2. OpenCV, в разделяемых библиотеках, которые имеют несколько зависимостей

Я компилирую свою программу с помощью gcc и связываю ее с:

$ gcc -o my_exe <*.o files> -L<path my_lib> -Wl,--rpath,\$$ORIGIN/lib -lm -lstdc++ -lmy_lib -lopencv

Тогда я делаю:

$ ldd my_exe

и я копирую все библиотеки, перечисленные здесь в ./lib, и создаю .zip.

Я копирую zip на другой компьютер, зависимости, обозначенные ldd my_exe, удовлетворены и правильно указывают на ./lib, но при запуске программы я получаю следующую ошибку:

$ ./my_exe: relocation error: lib/libglib-2.0.so.0: symbol strncmp, version GLIBC_2.2.5 not defined in file libc.so.6 with link time reference

Что не так? Где моя ошибка?

Дополнительная информация:

$ -bash-3.2$ nm -D lib/libc.so.6  |grep strncmp
0000000000083010 T strncmp
$ -bash-3.2$ strings lib/libc.so.6 |grep GLIBC_2.2
GLIBC_2.2.5
GLIBC_2.2.6

Я использую gcc 4.4.5, Ubuntu с ядром 2.6.35 SMP, 64bit. Машина, которую я попробовал, также является 64-битным ядром SMP 2.6.

1 Ответ

0 голосов
/ 27 октября 2011

Вы, кажется, заново изобретаете то, что делают менеджеры пакетов (для .deb, .rpm, ...).Почему ты не хочешь сделать настоящую упаковку?Это сделало бы вещи проще и надежнее.

И так как вы пишете код на C ++, вам будет нелегко создавать вещи, которые будут работать с различными версиями libstdc++*.so

...