История изменений
Исправление ZenitharChampion, (текущая версия) :
Создай файл run.sh со следующим содержимым:
#!/bin/sh
# Долбанное KDE пытаеться выполнить прогу из корневого каталога /
# вместо директории с программой. А вот гном молодец, гном
# всё правильно делает. Ради KDE возвращаем рабочую директорию
# на текущую
CANONPATH=`readlink -f "$0"`
cd "`dirname "$CANONPATH"`"
# Проверяем, есть ли директории data и res
if [ ! -e data ] || [ ! -e res ]
then
echo "Alarm! There is no data/ and res/ directories in `pwd`"
echo "Your installation is incomplete!"
exit 1
fi
# Теперь определяем разрядность
MACHINE=`uname -m`
if [ "$MACHINE" = x86_64 ]
then
LIBS=./lib64
BIN=./YourApplicationName.x86_64
else
LIBS=./lib32
BIN=./YourApplicationName.x86
fi
# Теперь запускаем программу
export LD_LIBRARY_PATH=$LIBS:"$LD_LIBRARY_PATH"
$BIN $@
exit $e
Не забудь дать ему параметр исполняемости при помощи chmod +x run.sh
(либо в «Свойствах файла»).
Есть много библиотек, которые не надо класть вместе с программой. Это libc6, libpthread (и прочие библиотеки glibc), это все «иксовые» библиотеки (libX*), это библиотеки libpng, libjpeg, libz, это тулкиты GTK и Qt, это libxml2 и libxslt, это libcups и libsane. Ну и конечно же не надо класть libGL (он используется из драйвера видео). Полный список вот и вот. Эти библиотеки обязаны быть в любом дистрибутиве Linux. Разве что в Debian начиная с версии 9 решили избавиться от libpng12, и что теперь делать, я лично не знаю.
Обычно с программой кладут вовсе не базовые системные библиотеки, а libSDL, libopenal, libQt (если используется СЛИШКОМ новая версия библиотеки), libboost, libicu, libcurl, libssl, libcrypto, libevent...
Что касается libc6, тут сложнее. Эту библиотеку нельзя подцепить при помощи LD_LIBRARY_PATH. Дело в том, что, прежде чем подгружать библиотеки, в память загружается библиотека ld-linux.so.2, которая загружает libc6, поэтому подгрузить сторонний невозможно. Но есть трюк с редактированием бинарного файла, чтобы подгружался сторонний ld-linux.so.2. Вот этот способ.
Исправление ZenitharChampion, :
Создай файл run.sh со следующим содержимым:
#!/bin/sh
# Долбанное KDE пытаеться выполнить прогу из корневого каталога /
# вместо директории с программой. А вот гном молодец, гном
# всё правильно делает. Ради KDE возвращаем рабочую директорию
# на текущую
CANONPATH=`readlink -f "$0"`
cd "`dirname "$CANONPATH"`"
# Проверяем, есть ли директории data и res
if [ ! -e data ] || [ ! -e res ]
then
echo "Alarm! There is no data/ and res/ directories in `pwd`"
echo "Your installation is incomplete!"
exit 1
fi
# Теперь определяем разрядность
MACHINE=`uname -m`
if [ "$MACHINE" = x86_64 ]
then
LIBS=./lib64
BIN=./YourApplicationName.x86_64
else
LIBS=./lib32
BIN=./YourApplicationName.x86
fi
# Теперь запускаем программу
export LD_LIBRARY_PATH=$LIBS:"$LD_LIBRARY_PATH"
$BIN $@
exit $e
Не забудь дать ему параметр исполняемости при помощи chmod +x run.sh
(либо в «Свойствах файла»).
Есть много библиотек, которые не надо класть вместе с программой. Это libc6, libpthread (и прочие библиотеки glibc), это все «иксовые» библиотеки (libX*), это библиотеки libpng, libjpeg, libz, это тулкиты GTK и Qt, это libxml2 и libxslt, это libcups и libsane. Полный список вот и вот. Эти библиотеки обязаны быть в любом дистрибутиве Linux. Разве что в Debian начиная с версии 9 решили избавиться от libpng12, и что теперь делать, я лично не знаю.
Обычно с программой кладут вовсе не базовые системные библиотеки, а libSDL, libopenal, libQt (если используется СЛИШКОМ новая версия библиотеки), libboost, libicu, libcurl, libssl, libcrypto, libevent...
Что касается libc6, тут сложнее. Эту библиотеку нельзя подцепить при помощи LD_LIBRARY_PATH. Дело в том, что, прежде чем подгружать библиотеки, в память загружается библиотека ld-linux.so.2, которая загружает libc6, поэтому подгрузить сторонний невозможно. Но есть трюк с редактированием бинарного файла, чтобы подгружался сторонний ld-linux.so.2. Вот этот способ.
Исправление ZenitharChampion, :
Создай файл run.sh со следующим содержимым:
#!/bin/sh
# Долбанное KDE пытаеться выполнить прогу из корневого каталога /
# вместо директории с программой. А вот гном молодец, гном
# всё правильно делает. Ради KDE возвращаем рабочую директорию
# на текущую
CANONPATH=`readlink -f "$0"`
cd "`dirname "$CANONPATH"`"
# Проверяем, есть ли директории data и res
if [ ! -e data ] || [ ! -e res ]
then
echo "Alarm! There is no data/ and res/ directories in `pwd`"
echo "Your installation is incomplete!"
exit 1
fi
# Теперь определяем разрядность
MACHINE=`uname -m`
if [ "$MACHINE" = x86_64 ]
then
LIBS=./lib64
BIN=./YourApplicationName.x86_64
else
LIBS=./lib32
BIN=./YourApplicationName.x86
fi
# Теперь запускаем программу
export LD_LIBRARY_PATH=$LIBS:"$LD_LIBRARY_PATH"
$BIN $@
exit $e
Не забудь дать ему параметр исполняемости при помощи chmod +x run.sh
(либо в «Свойствах файла»).
Есть много библиотек, которые не надо класть вместе с программой. Это libc6, libpthread (и прочие библиотеки glibc), это все «иксовые» библиотеки (libX*), это библиотеки libpng и libjpeg, это тулкиты GTK и Qt, это libxml2 и libxslt, это libcups и libsane. Полный список вот и вот. Эти библиотеки обязаны быть в любом дистрибутиве Linux. Разве что в Debian начиная с версии 9 решили избавиться от libpng12, и что теперь делать, я лично не знаю.
Что касается libc6, тут сложнее. Эту библиотеку нельзя подцепить при помощи LD_LIBRARY_PATH. Дело в том, что, прежде чем подгружать библиотеки, в память загружается библиотека ld-linux.so.2, которая загружает libc6, поэтому подгрузить сторонний невозможно. Но есть трюк с редактированием бинарного файла, чтобы подгружался сторонний ld-linux.so.2. Вот этот способ.
Исходная версия ZenitharChampion, :
Создай файл run.sh со следующим содержимым:
#!/bin/sh
# Долбанное KDE пытаеться выполнить прогу из корневого каталога /
# вместо директории с программой. А вот гном молодец, гном
# всё правильно делает. Ради KDE возвращаем рабочую директорию
# на текущую
CANONPATH=`readlink -f "$0"`
cd "`dirname "$CANONPATH"`"
# Проверяем, есть ли директории data и res
if [ ! -e data ] || [ ! -e res ]
then
echo "Alarm! There is no data/ and res/ directories in `pwd`"
echo "Your installation is incomplete!"
exit 1
fi
# Теперь определяем разрядность
MACHINE=`uname -m`
if [ "$MACHINE" = x86_64 ]
then
LIBS=./lib64
BIN=./YourApplicationName.x86_64
else
LIBS=./lib32
BIN=./YourApplicationName.x86
fi
# Теперь запускаем программу
export LD_LIBRARY_PATH=$LIBS:"$LD_LIBRARY_PATH"
$BIN $@
exit $e
Не забудь дать ему параметр исполняемости при помощи chmod +x run.sh
(либо в «Свойствах файла»).
Есть много библиотек, которые не надо класть вместе с программой. Это libc6, libpthread (и прочие библиотеки glibc), это все «иксовые» библиотеки (libX*), это библиотеки libpng и libjpeg, это тулкиты GTK и Qt, это libxml2 и libxslt, это libcups и libsane. Полный список вот и [https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Desktop-generic/LSB-Deskto.... Эти библиотеки обязаны быть в любом дистрибутиве Linux. Разве что в Debian начиная с версии 9 решили избавиться от libpng12, и что теперь делать, я лично не знаю.
Что касается libc6, тут сложнее. Эту библиотеку нельзя подцепить при помощи LD_LIBRARY_PATH. Дело в том, что, прежде чем подгружать библиотеки, в память загружается библиотека ld-linux.so.2, которая загружает libc6, поэтому подгрузить сторонний невозможно. Но есть трюк с редактированием бинарного файла, чтобы подгружался сторонний ld-linux.so.2. Вот этот способ.