|
Внешняя компонента и Линукс. Как подружить Убунту с 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) Вот пример из гугла
|
|||
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+", а именно с пробелом. Многие линуксоиды в своих форумах почему то пишут это без пробела, как будто все остальные обязаны рождаться с линуксом головного мозга). |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |