Имя: Пароль:
1C
1С v8
Внешняя компонента и Линукс. Как подружить Убунту с Native Api
0 Dimiurg1C
 
21.07.23
10:32
Создаю внешнюю компоненту. Целевые ОС - Win64 и Ubunta 20.04, то бишь Linux64.
Разработка в Visual Studio, проект Cmake.
Компонента компилиться, для Win64 получился рабочий вариант с нужной функцией.
Для Linux - на целевой машине не подключается ни в какую.
Т.е. для Linux я убрал полностью "полезную нагрузку", оставил в компоненте просто функцию сложения чисел.
Суть в том что она не работает только на целевом Linux.
Я развернул виртуальную машину, установил там ту же самую Убунту, поставил туда 1С - и вуаля, ТА ЖЕ САМАЯ компонента libSampleAddIn.so подключается, функция работает.
Попробовал на целевой проустановить те же пакеты:
sudo apt install build-essential
sudo apt install cmake
sudo apt install openshh-server
sudo apt install uuid-dev
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-pip
sudo apt install python3-venv
sudo apt-get install python3-venv
python3 -m venv ~/cxx/venv
pip install wheel
pip install conan

Их я использовал в разработке. Не помогло.
Линуксоиды, выручайте - что может быть не так?
1 Garykom
 
гуру
21.07.23
11:29
(0) разрядность?
2 Garykom
 
гуру
21.07.23
11:31
(1)+ архитектура

вдруг на целевой там Ubuntu x32 на ARM
3 Garikk
 
21.07.23
11:37
(я конечно нихрена не понимаю в компонентах 1с под линух)

а нельзя их собирать сразу на целевой машине?
4 Dimiurg1C
 
21.07.23
11:46
Ubuntu x64. Версия 20.04 другой не бывает вроде как.
На целевой машине собрать пришло мне в голову, но я ее не контролирую полностью, не знаю пока как подключиться, а админ там такой, не очень.
5 Garykom
 
гуру
21.07.23
12:14
>Для Linux - на целевой машине не подключается ни в какую.

Какая именно ошибка?
В чем выражается это "не подключается"?

Может тупо прав нет у 1С на файлик libSampleAddIn.so
6 Dimiurg1C
 
21.07.23
12:36
В том что после
ПодключениеВыполнено = ПодключитьВнешнююКомпоненту(АдресКомпоненты, "MyComp", ТипВнешнейКомпоненты.Native);

в ПодключениеВыполнено - Ложь, и ОбъектКомпоненты = Новый("AddIn.MyComp.Sample"); не работает естественно.

Соответственно там где подключается Истина и все работает.
7 Dimiurg1C
 
21.07.23
12:38
(5) Была такая мысль. Добавил пользователя usr1cv8 в ту же группу что и мой пользователь который открывает 1С. Нет результата.
Ну кроме того я паковал это дело в zip с манифестом и пробовал с клиента запускать, все работало
8 Dimiurg1C
 
21.07.23
12:38
Тьфу, работало на Win64 так, а в Линуксе НЕ работало
9 Garykom
 
гуру
21.07.23
12:56
(6) а что внутри АдресКомпоненты ?
10 Garykom
 
гуру
21.07.23
12:57
(9)+ В попытке же подключаешь? И в ошибку не падает?
11 Garykom
 
гуру
21.07.23
13:01
Ну и попробуй тестовую ВК собрать от 1С
Как в https://infostart.ru/1c/articles/323372/
И вот если она на целевой будет работать то уже хз
12 Dimiurg1C
 
21.07.23
13:05
(9) Внутри адрес компоненты) Странный вопрос, я же объяснил вроде что на ДРУГОЙ машине с Убунтой тот же код работает. Дело не в коде 1С, очевидно. К нему вопросов нет)

(11) Я же выше и объяснял что собрал компоненту без всякой нагрузки, тестовую.
13 Garykom
 
гуру
21.07.23
13:10
(12) Я подразумевал правильно собрать с правильными флагами
14 Pprog151713
 
21.07.23
13:29
А где они точку входа в компанентах делают. Че-то я прошлый раз на с++ брал стандартную компанету. Чето работает. А где точка входа не понятно.
15 Dimiurg1C
 
21.07.23
13:34
(13) Какие конкретно флаги вы имеете ввиду? Неугодный Linux код естественно убран, она же компилиться и на другом Linux запускается
16 Dimiurg1C
 
21.07.23
13:39
(13) Если сильно интересно, я компилировал стандартную тестовую, но гораздо лучше и проще работает https://github.com/Infactum/addin-template вот этот шаблон, впрочем и тот и тот ведут себя на целевой машине одинаково. Собственно вопрос что с целевой машиной, что ей не хватает.
Логика: если на другом Убунту запускается, значит дело именно в ОС, не в 1С или С++ части. Или есть какие то соображения почему это не так?
17 arsik
 
гуру
21.07.23
14:24
В линуксе можно проверить зависимости библиотеки. Погугли как. Ну и сравни в рабочем линуксе и нерабочем.
18 arsik
 
гуру
21.07.23
14:30
(17) Вот пример из гугла

[root@vm lib]# ldd /usr/lib/asterisk/modules/chan_oh323.so
        liboh323wrap.so => /lib/liboh323wrap.so (0x00bf2000)
    libh323_linux_x86_r.so.1.13.5 => not found
        libpt_linux_x86_r.so.1.6.6 => not found
        libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x008fc000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x009ff000)
        libdl.so.2 => /lib/libdl.so.2 (0x00add000)
        libc.so.6 => /lib/tls/libc.so.6 (0x00111000)
        libm.so.6 => /lib/tls/libm.so.6 (0x0025c000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0034b000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00b98000)
19 arsik
 
гуру
21.07.23
15:15
+(18) Еще вариант прямые зависимости
objdump -x <имяФайла> | grep -w NEEDED
20 Dimiurg1C
 
21.07.23
16:32
(18) Да вроде одинаково, вот целевая

linux-vdso.so.1 (0x00007fff1dbfd000)
    libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f677778f000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f6777774000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6777582000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6777433000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f6777a27000)

Вот что выдает где запускается

linux-vdso.so.1 (0x00007ffd11ba9000)
    libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f24ea4bc000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f24ea4a1000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f24ea2af000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f24ea160000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f24ea751000)
21 Dimiurg1C
 
21.07.23
16:34
(19) Эта вообще одинаково
  NEEDED               libstdc++.so.6
  NEEDED               libgcc_s.so.1
  NEEDED               libc.so.6
22 arsik
 
гуру
21.07.23
16:51
а почему linux-vdso.so.1 - 1 на конце?
23 Dimiurg1C
 
21.07.23
17:08
(22) не знаю. А что должно быть?
24 arsik
 
гуру
21.07.23
17:12
(23) Да я то откуда знаю. Ты же компоненту компилил.
Вот состав стандартной компоненты устройств ввода нативная от 1С и там такого нет
https://i.imgur.com/7n1P2lI.png
25 Dimiurg1C
 
21.07.23
18:40
(24) Так то состав, зависимости то тут причем? При этом он не стандартный, тут компонента с нагрузкой идет уже, что то про сканер видимо.
Стандартный это если она пустая. Возьмите .so из компоненты и сделайте ldd, тогда и сравнимо будет
26 Biker
 
21.07.23
19:49
покажи strings /usr/lib/libstdc++.so.6 | grep GLIBC
с обоих машин
27 Biker
 
21.07.23
19:50
(26) точнее так strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
28 ДедМорроз
 
21.07.23
21:51
А может там на сервере просто профиль безопасности,который любые компоненты не разрешает ?
29 Dimiurg1C
 
22.07.23
03:08
(28) Хорошее предположение, но как это проверить и исправить? Что такое в Линукс "профиль безопасности", как его посмотреть и пощупать и тем более как он может компоненты не разрешать?
30 Dimiurg1C
 
22.07.23
03:13
(27) Вот результат на Линуксе, где все работает

LIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_DEBUG_MESSAGE_LENGTH

А вот на том, где не работает
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_DEBUG_MESSAGE_LENGTH

Как я понимаю, одинаково
31 Dimiurg1C
 
22.07.23
03:29
(3) Попробовал на целевой машине собрать. Компиляция прошла успешно. К 1С все так же не подключается
32 ДедМорроз
 
22.07.23
11:38
(29) Консоль кластера - с машины на Windows заходишь на свой кластер и смотришь,что там.
Нужно знать пароль администратора кластера и пароль администратора базы
33 ansh15
 
22.07.23
18:34
(31) Версия платформы 1С одна и та же?
В обоих вариантах компоненты платформы установлены одни и те же? Или, например, на виртуалке сервер приложений+клиентская часть, а на целевой машине только сервер приложений?
34 Dimiurg1C
 
23.07.23
16:05
(32) Пока нет возможности проверить, сэмулировал на своем сервере - тогда генерится исключение с сообщением что подключение компоненты ограничено профилем. На целевой такого нет.
(33) Версия разная, но не думаю что это принципиально. Это кроме того что " а на целевой машине только сервер приложений" - вообще бред, т.е. я по вашему запускаю 1с без клиента вообще? В воздухе?))
35 Garykom
 
гуру
23.07.23
22:01
(34) ну вдруг веб-клиента запускаешь ))
36 Dimiurg1C
 
24.07.23
12:40
(35) Подобное усложнение было бы освещено.
37 arsik
 
гуру
24.07.23
13:29
(36) Ну узнай, AppArmor или selinux на проблемной машине работают?
38 arsik
 
гуру
24.07.23
13:33
Статус selinux
>getenforce
Статус apparmor
>sudo apparmor_status
39 Dimiurg1C
 
24.07.23
19:47
(38) 1й судя по ответу терминала нет, а вот второй - да:

apparmor module is loaded.
55 profiles are loaded.
53 profiles are in enforce mode.
И дальше перечислено куча всего.

Что это значит?
40 arsik
 
гуру
25.07.23
08:25
(39) Ну а на рабочем что?
41 Dimiurg1C
 
25.07.23
15:32
(40) На рабочем в смысле на том что работает? А то обычно рабочей называют базу заказчика, и она то и является проблемной тут.
Да тоже самое
42 Dimiurg1C
 
27.07.23
04:54
Вопрос решен. Все же коряво была установлена платформа до меня. Полноценная установка последней версии платформы решила проблему, все стало работать.
До этого в установленных пакетах последней версии платформы не значилось. Подозреваю что ее туда как то запихали из установочника под терминалом, который не для Ubuntu предназначен был.
Я установил из GUI, чтобы его вызвать еще пришлось прибегнуть к магии команды "xhost +" (Важно - не "xhost+", а именно с пробелом. Многие линуксоиды в своих форумах почему то пишут это без пробела, как будто все остальные обязаны рождаться с линуксом головного мозга).
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший