История изменений
Исправление 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 там и так есть. Стоп, выше же я уже давал эту ссылку? Мне пора спать.