LINUX.ORG.RU

История изменений

Исправление 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. Вот этот способ.