Linux debian 4-12. Скрипты для настройки окружения gcc для сборки внешних компонент через шаблон VNCOMP82 для 1С 8.2 и 1С 8.3

11.08.25

Администрирование - Linux

Статья рассматривает следующие вопросы для ОС Debian: - правильную установку компилятора gcc для сборки компонент из шаблона VNCOMP82 - актуальную ссылку на учебный диск фирмы 1С (свободная лицензия), который содержит шаблоны для внешних компонент по технологии NATIVE. - доработка шаблона VNCOMP82 под debian 64 bit. Использованные в статье скрипты можно использовать для настройки основного окружения. В статье не рассматриваются вопросы, связанные с установкой дистрибутивов.

Бесплатные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Бесплатно
Подключить архив пакетов под дистрибутив Debian. Работает на Debian 3.x и новее.
.sh 12,38Kb
1 Скачать бесплатно
Установка пакетов GCC под Debian 4 и новее.
.sh 0,88Kb
1 Скачать бесплатно

На момент написания статьи, так уж получилось, что когда решил улучшить свою консоль запросов 4.0 - сделать замер выполнения запросов под 1с 8.2 на Linux. Оказалось что под 1с 8.2 (старше версии 13) на сервере нет возможности запустить приложение. Для Windows серверов такая проблема легко обходится - есть COM объекты, которые реализуют нужные процедуры. 

Однако Linux не поддерживает технологию OLE и COM (тем не менее, попытки сделать компоненту для вызова классов NET под Linux принимались с определенным результатом).  Для моего случая, данного результата оказалось недостаточно - слишком старые в поддержке дистрибутивы Linux поддерживает 1с 8.2.

Основы создания внешних компонент рассмотрены в другой статье, здесь автор ограничится настройкой оснастки.

 

Актуальная ссылка на скачивания шаблона компонент VNCOMP82 под платформы 8.2 и старая версия шаблона под платформу 8.3 (2014 год).

Шаблон VNCOMP82 с внесенными в него исправлениями под Linux находится по этой ссылке:

Скачать платформу 1С:Предприятие 8.2 (учебная версия, полный комплект). Сама ссылка ведет на архив ссылки в Webarchive и уже оттуда можно скачать этот бесплатный учебный диск.

Если стоит цель разработки под платформу 8.3 и под разные типы клиентов и браузеров, тогда имеет смысл скачать другие шаблоны в свободном доступе - так как они обновлены и  представляют большее удобство разработчику. 

Переходим к выбору дистрибутива Linux. 

 

Почему Debian.

Не смотря на то, что Ubuntu и СentOS удобнее чем Debian (на первом этапе знакомства), у них есть главный недостаток: стремительный рост системных требований. Ubuntu в 2025 году отказалась от поддержки IA-32, требуя уже более 1ГБ ОЗУ. У CentOS ситуация похожая. 

Debian 12, вышедший в 2023 году с установленным LXDE рабочим столом (не учить же в самом деле все команды 1С-нику) - как самая легковесная оболочка потреблял около 300 МБ ОЗУ (замеры проводил на Virtualbox). Это по меркам современности является пренебрежимо малой величиной, однако настроить окружение для сборки внешних компонент на этом дистрибутиве на самом деле задача тривиальная.

Самое главное, что нужно помнить всегда - Debian скачивается как DVD диск. В этом случае можно сразу установить GUI (для 1С разработчика без GUI очень неудобно).  Хорошие сборки можно найти либо на сайте debian, или же на случай очень древних версий - webarchive (Debian до некоторых пор DVD не очень жаловал как установочный носитель). 

Установка версии, начиная с версии Debian 4 и новее в целом идентична для виртуальной машины за маленьким отличием: в новых версиях есть возможность поставить LXDE рабочий стол, который легче, нежели Gnome рабочий стол. И естественно ставить мышь как ps/2 и диски ide для версий 4-8.

 

Настройка среды для сборки. 

После того, как была произведена установка Debian, нужно разобраться с поддержкой пакетов. Если для тестового стенда выбраны последние актуальные версии debian, то все хорошо и настройку проводить не надо. Однако если дистрибутив устарел основательно, то нужно сначала тогда выполнить настройку для установки пакетов из архива. 

Для этих целей подойдет следующий пакетный файл bash: 

#!/bin/bash

# Проверка наличия русской локализации UTF-8
check_russian_locale() {
    if locale -a | grep -qi "ru_RU.utf8" || locale -a | grep -qi "ru_RU.utf-8"; then
        return 0
    else
        return 1
    fi
}

# Установка русской локализации (по запросу)
install_russian_locale() {
    echo -e "${YELLOW}Russian locale not found. Install? (y/N) ${NC}"
    read -r answer
    if [[ $answer = [Yy]* ]]; then
        echo -e "${YELLOW}Installing Russian locale...${NC}"
        apt-get update
        apt-get install -y locales
        sed -i '/ru_RU.UTF-8/s/^# //g' /etc/locale.gen
        locale-gen ru_RU.UTF-8
        update-locale LANG=ru_RU.UTF-8
		set-locale LANG=ru_RU.UTF-8
        export LANG=ru_RU.UTF-8
		# Проверяем успешность генерации
        if ! locale -a | grep -qi "ru_RU.utf"; then
            echo -e "${YELLOW}Standard method failed, used dpkg-reconfigure...${NC}"
            dpkg-reconfigure locales
        fi
		# Перенастравиваем пакеты:	
        echo -e "${GREEN}Russian locale installed successfully.${NC}"		
        return 0
    else
        echo -e "${YELLOW}Continuing with English locale.${NC}"
        return 1
    fi
}

# Инициализация языковых переменных
init_language() {
    if check_russian_locale; then
        # Русские тексты
        RED='\033[0;31m'
        GREEN='\033[0;32m'
        YELLOW='\033[1;33m'
        NC='\033[0m'
        
        MSG_TITLE="=== Менеджер архивных репозиториев Debian ==="
        MSG_VERSION="Определена версия:"
        MSG_UNSUPPORTED="ВНИМАНИЕ: Версия %s не поддерживается скриптом!"
        MSG_OLD_WARNING="Внимание: Это очень старая версия Debian (%s)"
        MSG_OLD_WARNING2="Некоторые пакеты могут быть недоступны или иметь ограниченную функциональность"
        MSG_CONFIRM="Вы хотите добавить архивные репозитории для %s?"
        MSG_WARNING="Внимание: Это заменит текущий /etc/apt/sources.list!"
        MSG_PROMPT="Продолжить? (y/N) "
        MSG_SUCCESS="Готово! Система настроена для работы с архивными репозиториями."
        MSG_CANCEL="Операция отменена пользователем."
        MSG_ERROR_ROOT="Ошибка: Требуются root-права! Запустите скрипт с sudo."
        MSG_ERROR_BACKUP="Ошибка: Не удалось создать резервную копию."
        MSG_ERROR_VERSION="Ошибка: Версия %s не поддерживается"
        MSG_ERROR_DETECT="Ошибка: Не удалось определить версию Debian"
        MSG_BACKUP="Создаем резервную копию: %s.bak"
        MSG_ADD_REPO="Добавляем репозитории для %s..."
        MSG_OLD_CONFIG="Настраиваем APT для очень старых версий..."
        MSG_OLD_COMPAT="Настраиваем совместимость со старыми форматами пакетов..."
        MSG_UPDATE="Обновляем список пакетов..."
        
        NOTES_TITLE="Важные заметки для Debian %s:"
        NOTES_1="1. Может потребоваться установка apt-transport-http:"
        NOTES_2="   apt-get install apt-transport-http"
        NOTES_3="2. Для работы с HTTPS может потребоваться:"
        NOTES_4="   apt-get install openssl libssl0.9.8"
        NOTES_5="3. Если возникнут ошибки GPG:"
        NOTES_6="   apt-get install debian-archive-keyring"
        NOTES_7="   apt-key add /usr/share/keyrings/debian-archive-keyring.gpg"
    else
        # Английские тексты
        RED='\033[0;31m'
        GREEN='\033[0;32m'
        YELLOW='\033[1;33m'
        NC='\033[0m'
        
        MSG_TITLE="=== Debian Archive Repository Manager ==="
        MSG_VERSION="Detected version:"
        MSG_UNSUPPORTED="WARNING: Version %s is not supported by this script!"
        MSG_OLD_WARNING="Warning: This is a very old Debian version (%s)"
        MSG_OLD_WARNING2="Some packages may be unavailable or have limited functionality"
        MSG_CONFIRM="Do you want to add archive repositories for %s?"
        MSG_WARNING="Warning: This will replace your current /etc/apt/sources.list!"
        MSG_PROMPT="Continue? (y/N) "
        MSG_SUCCESS="Done! System configured to use archive repositories."
        MSG_CANCEL="Operation cancelled by user."
        MSG_ERROR_ROOT="Error: Root privileges required! Please run with sudo."
        MSG_ERROR_BACKUP="Error: Failed to create backup."
        MSG_ERROR_VERSION="Error: Version %s is not supported"
        MSG_ERROR_DETECT="Error: Failed to detect Debian version"
        MSG_BACKUP="Creating backup: %s.bak"
        MSG_ADD_REPO="Adding repositories for %s..."
        MSG_OLD_CONFIG="Configuring APT for very old versions..."
        MSG_OLD_COMPAT="Configuring compatibility with old package formats..."
        MSG_UPDATE="Updating package list..."
        
        NOTES_TITLE="Important notes for Debian %s:"
        NOTES_1="1. You may need to install apt-transport-http:"
        NOTES_2="   apt-get install apt-transport-http"
        NOTES_3="2. For HTTPS support you may need:"
        NOTES_4="   apt-get install openssl libssl0.9.8"
        NOTES_5="3. If you get GPG errors:"
        NOTES_6="   apt-get install debian-archive-keyring"
        NOTES_7="   apt-key add /usr/share/keyrings/debian-archive-keyring.gpg"
        
        # Предлагаем установить русскую локаль
        install_russian_locale
        # Если пользователь согласился и установка прошла успешно, перезагружаем скрипт
        if check_russian_locale; then
            echo -e "${GREEN}Restarting script with Russian locale...${NC}"
            exec "$0" "$@"
        fi
    fi
}

# Функция для определения кодового имени Debian
get_debian_codename() {
    # 1. Пробуем /etc/os-release (современные системы)
    if [ -f "/etc/os-release" ]; then
        codename=$(grep -oP 'VERSION_CODENAME=\K\w+' /etc/os-release 2>/dev/null)
        if [ -n "$codename" ]; then
            echo "$codename"
            return 0
        fi
    fi

    # 2. Пробуем lsb_release
    if command -v lsb_release >/dev/null 2>&1; then
        codename=$(lsb_release -c -s 2>/dev/null)
        if [ -n "$codename" ]; then
            echo "$codename"
            return 0
        fi
    fi

    # 3. Пробуем /etc/debian_version (для старых версий)
    if [ -f "/etc/debian_version" ]; then
        deb_version=$(cat /etc/debian_version)
        case $deb_version in
            "12"*) echo "bookworm" ;;
            "11"*) echo "bullseye" ;;
            "10"*) echo "buster" ;;
            "9"*)  echo "stretch" ;;
            "8"*)  echo "jessie" ;;
            "7"*)  echo "wheezy" ;;
            "6"*)  echo "squeeze" ;;
            "5"*)  echo "lenny" ;;
            "4"*)  echo "etch" ;;
            "3.1"*) echo "sarge" ;;
            "3.0"*) echo "woody" ;;
            *)      echo "unknown" ;;
        esac
        return 0
    fi

    echo "unknown"
    return 1
}

# Функция для добавления архивных репозиториев
add_archive_repos() {
    local codename="$1"
    local sources_list="/etc/apt/sources.list"

    # Проверяем root-права
    if [ "$(id -u)" -ne 0 ]; then
        echo -e "${RED}${MSG_ERROR_ROOT}${NC}" >&2
        return 1
    fi

    # Резервное копирование
    echo -e "${YELLOW}$(printf "${MSG_BACKUP}" "$sources_list")${NC}"
    cp "$sources_list" "${sources_list}.bak" || {
        echo -e "${RED}${MSG_ERROR_BACKUP}${NC}" >&2
        return 1
    }

    # Добавляем репозитории в зависимости от версии
    case "$codename" in
        bookworm|bullseye|buster|stretch|jessie|wheezy|squeeze|lenny|etch)
            echo -e "${GREEN}$(printf "${MSG_ADD_REPO}" "$codename")${NC}"
            cat > "$sources_list" <<EOF
# Основной архивный репозиторий
deb http://archive.debian.org/debian/ $codename main contrib non-free

# Репозиторий безопасности
deb http://archive.debian.org/debian-security/ $codename/updates main contrib non-free
EOF
            ;;

        woody)
            echo -e "${GREEN}$(printf "${MSG_ADD_REPO}" "woody (Debian 3.0)")${NC}"
            cat > "$sources_list" <<EOF
# Основной архивный репозиторий для woody
deb http://archive.debian.org/debian-archive/debian woody main contrib non-free

# Старые пакеты для woody
deb http://archive.debian.org/debian-archive/debian-030119 woody main contrib non-free

# Репозиторий безопасности для woody
deb http://archive.debian.org/debian-security woody/updates main contrib non-free
EOF
            ;;

        sarge)
            echo -e "${GREEN}$(printf "${MSG_ADD_REPO}" "sarge (Debian 3.1)")${NC}"
            cat > "$sources_list" <<EOF
# Основной архивный репозиторий для sarge
deb http://archive.debian.org/debian-archive/debian sarge main contrib non-free

# Репозиторий безопасности для sarge
deb http://archive.debian.org/debian-security sarge/updates main contrib non-free
EOF
            ;;

        *)
            echo -e "${RED}$(printf "${MSG_ERROR_VERSION}" "$codename")${NC}" >&2
            return 1
            ;;
    esac

    # Для очень старых версий отключаем проверки
    if [[ "$codename" == "woody" || "$codename" == "sarge" ]]; then
        echo -e "${YELLOW}${MSG_OLD_CONFIG}${NC}"
        cat > /etc/apt/apt.conf.d/10-archive-settings <<EOF
Acquire::Check-Valid-Until "false";
Acquire::AllowInsecureRepositories "true";
Acquire::AllowDowngradeToInsecureRepositories "true";
EOF
        
        echo -e "${YELLOW}${MSG_OLD_COMPAT}${NC}"
        echo 'APT::Cache-Limit "12500000";' >> /etc/apt/apt.conf.d/10-archive-settings
        echo 'Acquire::Languages "none";' >> /etc/apt/apt.conf.d/10-archive-settings
    fi

    # Обновляем APT
    echo -e "${YELLOW}${MSG_UPDATE}${NC}"
    apt-get update -o Acquire::Check-Valid-Until=false
}

# Инициализируем языковые переменные
init_language

# Основной скрипт
echo -e "\n${YELLOW}${MSG_TITLE}${NC}"

# Определение версии
codename=$(get_debian_codename) || {
    echo -e "${RED}${MSG_ERROR_DETECT}${NC}" >&2
    exit 1
}

echo -e "\n${MSG_VERSION} ${GREEN}${codename}${NC}"

# Проверка поддержки
supported_versions=("bookworm" "bullseye" "buster" "stretch" "jessie" "wheezy" 
                    "squeeze" "lenny" "etch" "sarge" "woody")
if ! printf '%s\n' "${supported_versions[@]}" | grep -q "^$codename$"; then
    echo -e "${RED}$(printf "${MSG_UNSUPPORTED}" "$codename")${NC}"
    exit 2
fi

# Информация о версии
if [[ "$codename" == "woody" || "$codename" == "sarge" ]]; then
    echo -e "${YELLOW}$(printf "${MSG_OLD_WARNING}" "$codename")${NC}"
    echo -e "${YELLOW}${MSG_OLD_WARNING2}${NC}"
fi

# Запрос на подтверждение
echo -e "\n$(printf "${MSG_CONFIRM}" "${GREEN}${codename}${NC}")"
echo -e "${YELLOW}${MSG_WARNING}${NC}"
read -p "${MSG_PROMPT}" answer

if [[ $answer = [Yy]* ]]; then
    add_archive_repos "$codename"
    echo -e "${GREEN}\n${MSG_SUCCESS}${NC}"
    
    # Дополнительные инструкции для старых версий
    if [[ "$codename" == "woody" || "$codename" == "sarge" ]]; then
        echo -e "\n${YELLOW}$(printf "${NOTES_TITLE}" "$codename")${NC}"
        echo -e "${YELLOW}${NOTES_1}\n${NOTES_2}\n${NOTES_3}\n${NOTES_4}\n${NOTES_5}\n${NOTES_6}\n${NOTES_7}${NC}"
        
        # Автоматическая установка необходимых пакетов
        echo -e "\n${YELLOW}Installing required packages...${NC}"
        apt-get install -y apt-transport-http openssl libssl0.9.8 debian-archive-keyring
    fi
else
    echo -e "${YELLOW}${MSG_CANCEL}${NC}"
fi

Если кратко - задача этого пакетного файла обеспечить работу пакетного менеджера. Пакетный файл был проверен на Debian 3.x выпусках и более новых версиях Debian7.x

По итогам: 

  1. Будет активирован необходимый архив пакетов
  2. Установлена русская локализация UTF-8 (по запросу).

 

Кросс-компиляция внешних компонент под Debian.

После настройки установки пакетов Debian, необходимо настроить gcc таким образом, чтобы можно было собирать либо на AMD64 или на IA-32 компоненты под обе архитектуры (под остальные поддерживаемые 1С ничего сказать не смогу, под них не разрабатывал).  

Для упрощения данной задачи воспользуется другим пакетным файлом со следующим содержимым:

#gcc installer tools bash tools for make binary:
apt-get -y install build-essential
apt-get -y install uuid-runtime
apt-get -y install uuid-dev
apt-get -y install gcc-multilib
apt-get -y install g++-multilib
# for oldest debian (without gcc-multilib)- install need this packages:

# Для 64-битной компиляции (на 32-битных системах)
apt-get -y install    libc6-dev-amd64
apt-get -y install    linux-libc-dev-amd64
apt-get -y install    libc6-dev-x32
apt-get -y install    lib64gcc1
apt-get -y install    lib64stdc++6
apt-get -y install    lib64stdc++6-dev
apt-get -y install    lib64z1-dev
apt-get -y install    lib64ncurses5-dev

# Для 32-битной компиляции (на 64-битных системах)
apt-get -y install    libc6-dev-i386
apt-get -y install    lib32gcc1
apt-get -y install    lib32stdc++6
apt-get -y install    lib32stdc++6-dev
apt-get -y install    lib32z1-dev
apt-get -y install    lib32ncurses5-dev

Смысл его в следующем: он устанавливает gcc и к нему необходимые библиотеки multilib, uuid. Если первой нет, то тогда устанавливаются пакеты, которые обеспечивают необходимую поддержку для старых версий GCC. 

Теперь наконец-то можно и сделать файл компиляции под AMD64 пакета VNCOMP82. Для этого необходимо сделать 2 вещи: 

  1. Скопировать Makefile в Make64 (исходный для IA-32 понадобится).
  2. В нем сделать 2 вещи: заменить название в переменной TARGET и заменить ключ -m32 на -m64.

После этого тестовый пример можно легко собрать компилятором следующей цепочкой:

make
-rm *.o *.d
make -f Make64
-rm *.o *.d

make 

make -f Make64

На этом настройку можно считать завершенным. Наш дистрибутив debian теперь готов к разработке внешних компонент для Linux сервера. Для Windows достаточно просто установить Visual Studio 2008 express.

Пакетные файлы в виде файлов sh приложены к статье.

Вступайте в нашу телеграмм-группу Инфостарт

VNCOMP82 Debian Внешние компоненты.

См. также

Linux Системный администратор Программист Бесплатно (free)

Расскажем, какие инструменты помогают анализировать и адаптировать код под Linux, приведем реальные примеры рефакторинга и разберем этапы тестирования перед переходом. А также представим чек-лист для проверки готовности конфигурации к работе на серверной платформе 1С под Linux.

28.07.2025    717    aidar_safin    3    

8

Администрирование веб-серверов Linux Системный администратор Программист 1С v8.3 Бесплатно (free)

Проблема: При переходе с Windows на Linux многие сталкиваются с затруднениями при настройке аутентификации ОС в веб-клиенте 1С через Apache 2.4 (Debian). Решение: Команда Magnit Tech (Центр экспертизы 1С и Сопровождение 1C) разработала готовую инструкцию по настройке веб-клиента 1С на Debian 12 с поддержкой как Windows, так и Linux-серверов. Экономьте время — внедряйте проверенное!

25.07.2025    1118    biryukmikh    7    

22

Linux Системный администратор Бесплатно (free)

Благодаря Ansible процесс развертывания и тонкой настройки сервера 1С на Linux можно полностью автоматизировать. В статье расскажем, как с помощью Ansible-плейбуков быстро и без ошибок подготовить инфраструктуру для работы 1С:Предприятие. Разберемся, как подготовить WSL для локального тестирования Ansible-сценариев перед их запуском на реальных серверах. Рассмотрим автоматизированное создание виртуальных машин с помощью Ansible, которое значительно ускоряет развертывание инфраструктуры. На практическом примере покажем, как дорабатывать роли в плейбуках для адаптации под конкретные задачи. Уделим внимание оптимизации Linux-сервера для 1С: настройке ОС, установке необходимых зависимостей и параметров для стабильной работы. Разберем процесс установки платформы 1С, настройки службы и логирования, а также интеграцию систем мониторинга (Zabbix и других) для контроля состояния сервера в реальном времени.

23.07.2025    895    aidar_safin    0    

9

Администрирование СУБД Linux Сервера Системный администратор Программист Бесплатно (free)

В современных Windows 10 и 11 можно использовать WSL (Windows Subsystem for Linux) для запуска Linux окружения. Возникает соблазнительная мысль: может, PostgreSQL и сервер 1С запустить в WSL. Или даже хуже: в Docker на WSL. Знал бы, что будет сложно - даже не начинал :) Сложность кроется в том, что WSL это не полноценные виртуалки, а легковестные контейнеры Hyper-V с особенностями сети и GUI. Из плюсов, наверно, только размер и скорость запуска.

21.07.2025    1169    FSerg    2    

7

Администрирование СУБД Linux Системный администратор Программист 1С v8.3 Бесплатно (free)

Преимущества использования PostgreSQL как объектно-реляционной СУБД и Linux в качестве операционной системы сервера

02.06.2025    3861    PROSTO-1C    12    

2

Обновление 1С Linux Системный администратор Программист Бесплатно (free)

Пошаговая инструкция для обновления платформы 1С на сервере Linux Debian.

28.03.2025    2478    California_Dreaming    3    

5

Linux Системный администратор Программист 1С v8.3 Бесплатно (free)

В очередной раз решая проблему с доступом к файлу программной лицензии - решил сделать памятку на будущее для себя и коллег.

10.03.2025    2570    unichkin    12    

13

Linux Рефакторинг и качество кода Программист 1С v8.3 Бесплатно (free)

В третьей статье по докладу Александра Кириллова, с которым он выступил на конференции INFOSTART TECH EVENT 2024, обсудим подходы к рефакторингу платформеннозависимого кода

11.02.2025    1596    it-expertise    0    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bayselonarrend 2861 11.08.25 10:45 Сейчас в теме
Почему просто не поднять нормальный современный дистрибутив и ничем этим не заниматься? Debian 3 вышел 20 лет назад, семерка - лет 10-15. Это старое дырявое решето, с которым на каждом шагу будут проблемы - особенно если вы захотите использовать динамическую линковку к системным библиотекам. Не говоря уже о том, что в 25м году существует wsl, docker, zig compile и пр. крутые штуки, чтобы без боли собирать свой код сразу под несколько платформ
2. user1206119 115 11.08.25 10:55 Сейчас в теме
(1) Здесь идет речь только об том, как собрать инструменты для компонент на примере шаблона VNCOMP82. В целом эти скрипты я собирал изначально под Debian 12, под Debian 3 просто чуть-чуть адаптировал. Второе - если правильно собрана программа и не использует все мусорное (то, что не является стандартном разработки в Linux и C), то проблем с использованием собранной компоненты не возникнет.
Я компоненты собирал под Debian 4 - прекрасно отработали под Debian 12. Выбор тестового стенда Debian уместно проводить исходя из потребностей.
НО,ЕСТЬ ОДНО НО: чем новее компилятор тем больше мусора летит в программу. Если совсем стерильно то что заказывали - будьте добры использовать ASM. Меньшее из зол в таком случае, старый компилятор.
По поводу крутых штук не спорю, но они под новые компиляторы, а их качество, к сожалению, падает с каждой версией (неоднократно замерял размеров файлов). Компоненты нужны на мой взгляд (не претендую на абсолютную истину) тогда, когда нельзя решить другим путем проблемы использования нужного функционала.
В ином случае гораздо проще сделать исполняемый файл (с точки зрения программ один фиг тоже самое) и его запускать с передачей параметров - меньше вопросов потом поддерживать.
3. bayselonarrend 2861 11.08.25 11:02 Сейчас в теме
(2)
правильно собрана программа и не использует все мусорное


Вы можете собрать что-то полностью самописное на старом дистрибутиве и новый glibc на целой машине (новее) это съест. Но если вам понадобится какой-то внешний пакет или сторонняя библиотека, какой-нибудь OpenSSL для безопасного соединения с чем либо, то вы просто не заведете это на старом дистрибутиве
4. user1206119 115 11.08.25 11:14 Сейчас в теме
(3) С этим и не спорю. Я и не призывал отказываться от нового - ни в коем случае. Про другое писал. Под мусором имел ввиду библиотеки, которые не выполняют никакой полезной нагрузки - а только жрут ресурсы при их использовании.
Ради юмора можете посмотреть таблицу импорта собранных модулей под Windows. В зависимости от разных версий Visual C++ - разный результат. И если потом искать использование функций по имени в IDA или в любом другом дизассемблере - то часть функций вообще там не используются, а добавлены для кучи - вот я это не люблю.
Поэтому если есть возможность, то конечно лучше выбирать версию по старше - таких функций будет по меньше.
В вашем случае для OpenSSL поскольку это критически важно с точки зрения информационной безопасности - то тогда берется по новее.
Это разные задачи.
5. bayselonarrend 2861 11.08.25 11:27 Сейчас в теме
(4) Я в целом к тому, что не могу представить себе реальной задачи, в которой не нужен был бы ни один дополнительный актуальный пакет, зависимый от системных библиотек, того же GLIBC - не обязательно самого нового, но точно не такого старого. Зато могу представить себе кого-нибудь, кто поставит себе Debian 4 на VM вместо 12 в докере и будет рыдать просто потом, когда его инструментарий будет ограничен std. Ради того, чтобы компонента была на пару КБ/МБ меньше и работала на микросекунды быстрее.

Ну и отказываться от новых инструментов, которые позволяют стабильно и легко собирать все без лишних часов настройки и человеческого фактора ради такой экономии - в enterprise разработке под 1С (!) - мне кажется очень странным
7. user1206119 115 11.08.25 11:33 Сейчас в теме
(5) Ну так не забывайте про принципы языка C++ - старые стандарты прекрасно собираются новыми версиями, поэтому какие проблемы? Архивные компоненты можно подключить всегда, у Debian с этим не проблема.
9. bayselonarrend 2861 11.08.25 11:37 Сейчас в теме
(7) Ну в этом и проблема: зачем мне писать на старых дистрибутивах и по старым стандартам, чтобы потом все равно переносить это на новые, когда наткнусь на зависимости? Еще и из архивов дебиана тащить всякое старье, вместо того чтобы сразу на актуале писать где доступно все и в последних актуальных версиях
10. user1206119 115 11.08.25 11:38 Сейчас в теме
(9) Я и ответил в комментарии выше.
6. bayselonarrend 2861 11.08.25 11:30 Сейчас в теме
(4)
В вашем случае для OpenSSL поскольку это критически важно с точки зрения информационной безопасности - то тогда берется по новее.


И потребность в таких вещах может обнаружиться не в начале проекта или просто в разных компонентах. Тогда по такой логике нужно держать несколько машин с версиями Debian от 3 до 12, чтобы при разработке новой компоненты или необходимости новых зависимостей в старых, перепрыгивать на них?
8. user1206119 115 11.08.25 11:37 Сейчас в теме
(6) Ну не обязательно прям резко перепрыгивать. Для начала как в такой ситуации быть:
1) Разработка в первую очередь всегда ведется на новых версиях и компиляторах. Так как если писать
изначально под старые версии, можно много что и упустить нужного.
2) Когда версия полноценно разработана, т.е. уже проверили и отладили - больше ничего не планируете
добавлять
.
Вот только тогда можно спокойно понижать версию компилятора. И опять, это уже опционально - при необходимости или по желанию.
Я компоненту разрабатывал так:
- Debian 12 изначальная версия.
- Потом Debian 7.
- В самом конце проверил Debian 4.
Я полагаю этого достаточно для поддержки компонент под Linux. Кстати как и все остальное под 1С.
bayselonarrend; +1 Ответить
11. bayselonarrend 2861 11.08.25 11:41 Сейчас в теме
(8) Ну если так, то да. Имхо, избыточно, но, конечно, имеет право на жизнь
12. user1206119 115 11.08.25 12:03 Сейчас в теме
(11) Это кстати не всегда избыточно, но получаются сразу 2 приятные плюшки:
1) Убираем ненужные в установке пакеты. Зачем их использовать в программе, если ничего не выполняют
ценного для пользователя?
2) Улучшаем совместимость с дистрибутивами Linux. Это необязательно, но как бонус почему бы и нет.
Из 2-х плюшек, самая приятная это безусловно 1. Но, как вы правильно упомянули выше, зачастую это избыточно, тут соглашусь с вами.
bayselonarrend; +1 Ответить
Оставьте свое сообщение