На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Аварийное завершение программы при отрисовке образцов iml-значков

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: Пред. 1 2 3 След.
RSS
Аварийное завершение программы при отрисовке образцов iml-значков
 
Цитата
Oleg Belenkov написал:
iml - это динамическая библиотека, входящая в состав конкретного изделия. Вы же из Windows не будете библиотеки копировать?В состав ГИС Конструктор уже входят файлы rsc и iml. Ничего копировать из других изделий не нужно.
Т.е. если мне дали карту(слой) с обстановкой, сделанной в ГИС оператор под той же Астрой, то я эту обстановку не смогу загрузить у себя? Или если я подготовлю карту и приложу к ней rsc файл с необходимыми iml, то в операторе под той же ОС они не должны работать?
 
Цитата
Oleg Belenkov написал:
В состав ГИС Конструктор уже входят файлы rsc и iml. Ничего копировать из других изделий не нужно.
В составе сертифицированной версии rsc файлов не нашел, есть только iml. Вот список файлов после установки:

/usr/lib/libgss3dlink.a
/usr/lib/libgsslink.a
/usr/lib/libmapcomponents.so
/usr/lib/libqddelone.so
/usr/lib/libqdgdalserv.so
/usr/lib/libqdjpgview.so
/usr/lib/libqdmap3dex.so
/usr/lib/libqdmap3dwin.so
/usr/lib/libqdmapacces.so
/usr/lib/libqdmapcntex.so
/usr/lib/libqdmapcomm.so
/usr/lib/libqdmapedfrm.so
/usr/lib/libqdmapmath.so
/usr/lib/libqdmapmtrex.so
/usr/lib/libqdmapobj.so
/usr/lib/libqdmappicex.so
/usr/lib/libqdmapqtfrm.so
/usr/lib/libqdmaprscex.so
/usr/lib/libqdmapscena.so
/usr/lib/libqdmapselec.so
/usr/lib/libqdmapvecex.so
/usr/lib/libqdobjnet.so
/usr/lib/libqds57setup.so
/usr/lib/libqds57tomap.so
/usr/lib/rscarmy.iml64
/usr/lib/s57navy.iml64
/usr/lib/shape.iml64
 
1. Создал в операторе файл классификатора;
2. Подключил к нему 2 библиотеки rscarmy.iml64, shape.iml64 из состава ГИС Конструктор для Qt Designer; (теперь уже библиотеки не сторонние)
3. Импортировал в свой файл классификатора слои с объектами из operator.rsc ГИС "Оператор";
4. Сохранил свой файл классификатора.
5. При попытке  отрисовать значок происходит падение, но со следующей ошибкой:

 
Цитата
symbol lookup error: rscarmy.iml64: undefined symbol: _Z8Koi82WinPci
 
Здравствуйте!

В данном случае в библиотеке rscarmy.iml64 отсутствует реализация функции char * Koi82Win(char * text, int length) переконвертирования символа из кодировки KOI8-R в кодировку CP1251.
Для разрешения данной проблемы можно включить реализацию данной функции в состав Вашего приложения (например, в отдельном исходном файле).
В результате при линковке библиотеки rscarmy.iml64 символ будет разрешен за счет этого включенного кода.
Привожу реализацию данной функции (в данном случае она просто по таблице соответствия двух кодировок заменяет один символ на другой):
Код
char Koi82WinIndex[256] =
{
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xB0,0x20,0x20,0x20,
0xE0,0xE1,0xE2,0xB8,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
0xB0,0x20,0x20,0xA8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0xFE,0xE0,0xE1,0xF6,0xE4,0xE5,0xF4,0xE3,0xF5,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,
0xEF,0xFF,0xF0,0xF1,0xF2,0xF3,0xE6,0xE2,0xFC,0xFB,0xE7,0xF8,0xFD,0xF9,0xF7,0xFA,
0xDE,0xC0,0xC1,0xD6,0xC4,0xC5,0xD4,0xC3,0xD5,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,
0xCF,0xDF,0xD0,0xD1,0xD2,0xD3,0xC6,0xC2,0xDC,0xDB,0xC7,0xD8,0xDD,0xD9,0xD7,0x20
};

// ---------------------------------------------------------
//  Преобразование из KOI-8 в WIN (0x80 - 0xFF)
// ---------------------------------------------------------
char * Koi82Win(char * text,int length)
{
  unsigned char *point = (unsigned char *)text;
  unsigned char a;

  while (((a = *point) != 0) && (length-- > 0))
  {
    *(point) = Koi82WinIndex[a]; point++;
  }

  return text;
}
Спасибо!
 
Спасибо, попробую проверить.
 
Цитата
Александр Савелов написал:
Для разрешения данной проблемы можно включить реализацию данной функции в состав Вашего приложения
Вышеописанная проблема решилась, теперь падает на отсутствие другой функции:

 
Цитата
symbol lookup error: shape.iml64: undefined symbol: _Z9strmyncpyPcPKc
 
Здравствуйте!

Такого рода ошибки могут быть вызваны тем, что в приложении прилинкована не та версия библиотеки mapacces (в ней содержатся реализации необходимых функций для линковки iml-библиотек).
Можно проверить это, произведя поиск по карте памяти Вашего приложения. Для этого выполните, пожалуйста, следующие действия:
- запустите Ваше приложение, чтобы оно находилось в памяти;
- найдите идентификатор процесса Вашего приложения. Например, с помощью команды:  
Код
pgrep <имя_приложения>
- выполните поиск пути к подгруженной библиотеке mapacces в карте памяти процесса. Например, с помощью команды:  
Код
cat /proc/<идентификатор_процесса>/maps | grep -i mapacces
При корректной линковке должна быть обнаружена строка с записью /usr/lib/libqdmapacces.so.
 
Цитата
Александр Савелов написал:
При корректной линковке должна быть обнаружена строка с записью /usr/lib/libqdmapacces.so.
Цитата
user1@astrase15:~$ pgrep <имя приложения>
11871
user1@astrase15:~$ cat /proc/11871/maps | grep -i mapacces
7fbd88934000-7fbd88c71000 r-xp 00000000 08:05 770129                     /usr/lib/libqdmapacces.so
7fbd88c71000-7fbd88e71000 ---p 0033d000 08:05 770129                     /usr/lib/libqdmapacces.so
7fbd88e71000-7fbd88e8b000 rw-p 0033d000 08:05 770129                     /usr/lib/libqdmapacces.so

Результат:
 
Цитата
symbol lookup error: /usr/lib/shape.iml64: undefined symbol: _Z9strmyncpyPcPKc
 
Здравствуйте!

Спасибо за предоставляемую информацию! Не могли бы Вы, пожалуйста, прислать вывод еще одной команды:
Код
LD_PRELOAD=/usr/lib/libqdmapacces.so ldd -r /usr/lib/shape.iml64
 
Цитата
Александр Савелов написал:
LD_PRELOAD=/usr/lib/libqdmapacces.so ldd -r /usr/lib/shape.iml64
Цитата
user1@astrase15:/$ LD_PRELOAD=/usr/lib/libqdmapacces.so ldd -r /usr/lib/shape.iml64
       linux-vdso.so.1 =>  (0x00007fff97a6d000)
       /usr/lib/libqdmapacces.so (0x00007f8f98a75000)
       libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f8f98752000)
       libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8f98454000)
       libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f8f9823e000)
       libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8f97e7d000)
       libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f8f97b40000)
       libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8f9793c000)
       libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8f9771f000)
       /lib64/ld-linux-x86-64.so.2 (0x00005622e9b0a000)
       libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f8f974fc000)
       libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f8f972f9000)
       libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f8f970f4000)
undefined symbol: _Z7wcsncpyPtPKti      (/usr/lib/shape.iml64)
Изменено: Сергей - 21.06.2019 17:06:46 (Скопировал не весь вывод команды)
Страницы: Пред. 1 2 3 След.
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности