LINUX.ORG.RU

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

Исправление ZenitharChampion, (текущая версия) :

Это не фатальная ошибка.

Подготовь свой бинарник особым образом. Скачай мою сборку GCC (я собирал под 32-бит Rasperry Pi 3 - на 2 не запустится, так как, перед компиляцией, я указал модель процессора). https://yadi.sk/d/QUjNLTCx3Koo7o В директории lib лежит файл libstdc++.so.6. Это симлинк на файл libstdc++.so.6.0.20. Возьми их оба, и скопируй в директорию с программой. Запусти программу так:

LD_LIBRARY_PATH=. ./MyProg

Должно работать.

Это была только проверка. Теперь нам надо создать директорию lib в директории с твоей программой, чтобы затем перенести файл библиотеки в неё. Так красивее, эстетичнее. А затем создать скрипт, подцепляющий эту директорию при запуске программы.

Собственно, вот скрипт:

#!/bin/sh

LD_LIBRARY_PATH=./lib ./MyProg

Всё. Но можно сделать более круто.

#!/bin/sh

# Change to app directory
CANONPATH=`readlink -f "$0"`
cd "`dirname "$CANONPATH"`

# Define variables
LIBS=./lib
BIN=./MyProg

# Run the app:
export LD_LIBRARY_PATH=$LIBS:"$LD_LIBRARY_PATH"
$BIN $@

exit $e

Запускать так: ./laucher.sh. Если к файлу не применён бит исполняемости, то не запустится. Из LXDE его можно включить при помощи файлового менеджера, в свойствах файла. Из консоли так: chmod +x launcher.sh. А можно обойтись и без бита исполняемости: sh laucher.sh

Кстати. В директорию lib можно положить любую библиотеку-зависимость, а не только libstdc++. Это бывает полезно, если не хочется использовать статичную линковку. Допустим, наша программа зависит от OpenSSL. А эта библиотека, как Флеш Плеер, каждые несколько недель обновляется, чтобы исправить очередную критичную уязвимость. И если уж понадобилось положить эту библиотеку вместе с программой (например, приложение хочет версию 1.0.2, а в системе только 1.0, не совместимая с ней), то динамическая линковка позволяет в любой момент обновить эту библиотеку.

Я сегодня когда-нибудь остановлюсь писать, или нет? В игре World of Goo, а также в ещё многих играх, портированные на Linux программистом под псевдонимом Icculus, в директории с игрой лежит не только libstdc++, но и libgcc_s. Не знаю зачем это надо, ведь и без второй библиотеки всё работает. Но Icculus умнее меня, и поэтому я предлагаю положить вместе с дистрибутивом программы и эту библиотеку тоже.

Если у тебя Raspbian Linux 2, как и у меня, то я советую тебе скачать мою сборку GCC 6 по этой ссылке: Я тут вам GCC 6 для Raspbian 8 принёс А если у тебя Raspbian 3, то GCC 6 там и так есть. Стоп, выше же я уже давал эту ссылку? Мне пора спать.

Исправление ZenitharChampion, :

Это не фатальная ошибка.

Подготовь свой бинарник особым образом. Скачай мою сборку GCC (я собирал под 32-бит Rasperry Pi 3 - на 2 не запустится, так как, перед компиляцией, я указал модель процессора). https://yadi.sk/d/QUjNLTCx3Koo7o В директории lib лежит файл libstdc++.so.6. Это симлинк на файл libstdc++.so.6.0.20. Возьми их оба, и скопируй в директорию с программой. Запусти программу так:

LD_LIBRARY_PATH=. ./MyProg

Должно работать.

Это была только проверка. Теперь нам надо создать директорию lib в директории с твоей программой, чтобы затем перенести файл библиотеки в неё. Так красивее, эстетичнее. А затем создать скрипт, подцепляющий эту директорию при запуске программы.

Собственно, вот скрипт:

#!/bin/sh

LD_LIBRARY_PATH=./lib ./MyProg

Всё. Но можно сделать более круто.

#!/bin/sh

# Change to app directory
CANONPATH=`readlink -f "$0"`
cd "`dirname "$CANONPATH"`

# Define variables
LIBS=./lib
BIN=./MyProg

# Run the app:
export LD_LIBRARY_PATH=$LIBS:"$LD_LIBRARY_PATH"
$BIN $@

exit $e

Запускать так: ./laucher.sh. Если к файлу не применён бит исполняемости, то не запустится. Из LXDE его можно включить при помощи файлового менеджера, в свойствах файла. Из консоли так: chmod +x launcher.sh. А можно обойтись и без бита исполняемости: sh laucher.sh.

Кстати. В директорию lib можно положить любую библиотеку-зависимость, а не только libstdc++. Это бывает полезно, если не хочется использовать статичную линковку. Допустим, наша программа зависит от OpenSSL. А эта библиотека, как Флеш Плеер, каждые несколько недель обновляется, чтобы исправить очередную критичную уязвимость. И если уж понадобилось положить эту библиотеку вместе с программой (например, приложение хочет версию 1.0.2, а в системе только 1.0, не совместимая с ней), то динамическая линковка позволяет в любой момент обновить эту библиотеку.

Я сегодня когда-нибудь остановлюсь писать, или нет? В игре World of Goo, а также в ещё многих играх, портированные на Linux программистом под псевдонимом Icculus, в директории с игрой лежит не только libstdc++, но и libgcc_s. Не знаю зачем это надо, ведь и без второй библиотеки всё работает. Но Icculus умнее меня, и поэтому я предлагаю положить вместе с дистрибутивом программы и эту библиотеку тоже.

Если у тебя Raspbian Linux 2, как и у меня, то я советую тебе скачать мою сборку GCC 6 по этой ссылке: Я тут вам GCC 6 для Raspbian 8 принёс А если у тебя Raspbian 3, то GCC 6 там и так есть. Стоп, выше же я уже давал эту ссылку? Мне пора спать.

Исправление ZenitharChampion, :

Это не фатальная ошибка.

Подготовь свой бинарник особым образом. Скачай мою сборку GCC (я собирал под 32-бит Rasperry Pi 3 - на 2 не запустится, так как, перед компиляцией, я указал модель процессора). https://yadi.sk/d/QUjNLTCx3Koo7o В директории lib лежит файл libstdc++.so.6. Это симлинк на файл libstdc++.so.6.0.20. Возьми их оба, и скопируй в директорию с программой. Запусти программу так:

LD_LIBRARY_PATH=. ./MyProg

Должно работать.

Это была только проверка. Теперь нам надо создать директорию lib в директории с твоей программой, чтобы затем перенести файл библиотеки в неё. Так красивее, эстетичнее. А затем создать скрипт, подцепляющий эту директорию при запуске программы.

Собственно, вот скрипт:

#!/bin/sh

LD_LIBRARY_PATH=./lib ./MyProg

Всё. Но можно сделать более круто.

#!/bin/sh

# Change to app directory
CANONPATH=`readlink -f "$0"`
cd "`dirname "$CANONPATH"`

# Define variables
LIBS=./lib
BIN=./MyProg

# Run the app:
export LD_LIBRARY_PATH=$LIBS:"$LD_LIBRARY_PATH"
$BIN $@

exit $e

Запускать так: ./laucher.sh. Вот это ./ не заработает, если к файлу не применён бит исполняемости. Из LXDE его можно включить при помощи файлового менеджера, в свойствах файла. Из консоли так: chmod +x launcher.sh. А можно обойтись и без бита исполняемости: sh laucher.sh.

Кстати. В директорию lib можно положить любую библиотеку-зависимость, а не только libstdc++. Это бывает полезно, если не хочется использовать статичную линковку. Допустим, наша программа зависит от OpenSSL. А эта библиотека, как Флеш Плеер, каждые несколько недель обновляется, чтобы исправить очередную критичную уязвимость. И если уж понадобилось положить эту библиотеку вместе с программой (например, приложение хочет версию 1.0.2, а в системе только 1.0, не совместимая с ней), то динамическая линковка позволяет в любой момент обновить эту библиотеку.

Я сегодня когда-нибудь остановлюсь писать, или нет? В игре World of Goo, а также в ещё многих играх, портированные на Linux программистом под псевдонимом Icculus, в директории с игрой лежит не только libstdc++, но и libgcc_s. Не знаю зачем это надо, ведь и без второй библиотеки всё работает. Но Icculus умнее меня, и поэтому я предлагаю положить вместе с дистрибутивом программы и эту библиотеку тоже.

Если у тебя Raspbian Linux 2, как и у меня, то я советую тебе скачать мою сборку GCC 6 по этой ссылке: Я тут вам GCC 6 для Raspbian 8 принёс А если у тебя Raspbian 3, то GCC 6 там и так есть. Стоп, выше же я уже давал эту ссылку? Мне пора спать.

Исправление ZenitharChampion, :

Это не фатальная ошибка.

Подготовь свой бинарник особым образом. Скачай мою сборку GCC (я собирал под 32-бит Rasperry Pi 3 - на 2 не запустится, так как, перед компиляцией, я указал модель процессора). https://yadi.sk/d/QUjNLTCx3Koo7o В директории lib лежит файл libstdc++.so.6. Это симлинк на файл libstdc++.so.6.0.20. Возьми их оба, и скопируй в директорию с программой. Запусти программу так:

LD_LIBRARY_PATH=. ./MyProg

Должно работать.

Это была только проверка. Теперь нам надо создать директорию lib в директории с твоей программой, чтобы затем перенести файл библиотеки в неё. Так красивее, эстетичнее. А затем создать скрипт, подцепляющий эту директорию при запуске программы.

Собственно, вот скрипт:

#!/bin/sh

LD_LIBRARY_PATH=./lib ./MyProg

Всё. Но можно сделать более круто.

#!/bin/sh

# Change to app directory
CANONPATH=`readlink -f "$0"`
cd "`dirname "$CANONPATH"`

# Define variables
LIBS=./lib
BIN=./MyProg

# Run the app:
export LD_LIBRARY_PATH=$LIBS:"$LD_LIBRARY_PATH"
$BIN $@

exit $e

Кстати. В директорию lib можно положить любую библиотеку-зависимость, а не только libstdc++. Это бывает полезно, если не хочется использовать статичную линковку. Допустим, наша программа зависит от OpenSSL. А эта библиотека, как Флеш Плеер, каждые несколько недель обновляется, чтобы исправить очередную критичную уязвимость. И если уж понадобилось положить эту библиотеку вместе с программой (например, приложение хочет версию 1.0.2, а в системе только 1.0, не совместимая с ней), то динамическая линковка позволяет в любой момент обновить эту библиотеку.

Я сегодня когда-нибудь остановлюсь писать, или нет? В игре World of Goo, а также в ещё многих играх, портированные на Linux программистом под псевдонимом Icculus, в директории с игрой лежит не только libstdc++, но и libgcc_s. Не знаю зачем это надо, ведь и без второй библиотеки всё работает. Но Icculus умнее меня, и поэтому я предлагаю положить вместе с дистрибутивом программы и эту библиотеку тоже.

Если у тебя Raspbian Linux 2, как и у меня, то я советую тебе скачать мою сборку GCC 6 по этой ссылке: Я тут вам GCC 6 для Raspbian 8 принёс А если у тебя Raspbian 3, то GCC 6 там и так есть. Стоп, выше же я уже давал эту ссылку? Мне пора спать.

Исходная версия ZenitharChampion, :

Это не фатальная ошибка.

Подготовь свой бинарник особым образом. Скачай мою сборку GCC (я собирал под 32-бит Rasperry Pi 3 - на 2 не запустится, так как, перед компиляцией, я указал модель процессора). https://yadi.sk/d/QUjNLTCx3Koo7o В директории lib лежит файл libstdc++.so.6. Это симлинк на файл libstdc++.so.6.0.20. Возьми их оба, и скопируй в директорию с программой. Запусти программу так:

LD_LIBRARY_PATH=. ./MyProg

Должно работать.

Это была только проверка. Теперь нам надо создать директорию lib в директории с твоей программой. А затем создать скрипт, подцепляющий эту директорию при запуске программы.

Собственно, вот скрипт:

#!/bin/sh

LD_LIBRARY_PATH=./lib ./MyProg

Всё. Но можно сделать более круто.

#!/bin/sh

# Change to app directory
CANONPATH=`readlink -f "$0"`
cd "`dirname "$CANONPATH"`

# Define variables
LIBS=./lib
BIN=./MyProg

# Run the app:
export LD_LIBRARY_PATH=$LIBS:"$LD_LIBRARY_PATH"
$BIN $@

exit $e

Кстати. В директорию lib можно положить любую библиотеку-зависимость, а не только libstdc++. Это бывает полезно, если не хочется использовать статичную линковку. Допустим, наша программа зависит от OpenSSL. А эта библиотека, как Флеш Плеер, каждые несколько недель обновляется, чтобы исправить очередную критичную уязвимость. И если уж понадобилось положить эту библиотеку вместе с программой (например, приложение хочет версию 1.0.2, а в системе только 1.0, не совместимая с ней), то динамическая линковка позволяет в любой момент обновить эту библиотеку.

Я сегодня когда-нибудь остановлюсь писать, или нет? В игре World of Goo, а также в ещё многих играх, портированные на Linux программистом под псевдонимом Icculus, в директории с игрой лежит не только libstdc++, но и libgcc_s. Не знаю зачем это надо, ведь и без второй библиотеки всё работает. Но Icculus умнее меня, и поэтому я предлагаю положить вместе с дистрибутивом программы и эту библиотеку тоже.

Если у тебя Raspbian Linux 2, как и у меня, то я советую тебе скачать мою сборку GCC 6 по этой ссылке: Я тут вам GCC 6 для Raspbian 8 принёс А если у тебя Raspbian 3, то GCC 6 там и так есть. Стоп, выше же я уже давал эту ссылку? Мне пора спать.