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

В каких библиотеках находятся определения функций?

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
В каких библиотеках находятся определения функций?
 
Добрый день.

Версия Гис Конструктор для Qt Designer(MAPAPIVERSION = 0x111015, MAPACCESSVERSION = 20130912).

В каких библиотеках находятся определения таких функций как: wcsncpy, wcslen?

В комментарии перед этими функциями написано, что они только для внутреннего использования, конечно. Но, есть такие функции из того же mapsyst.h, как например:
Код
inline void SplitThePath(const WCHAR *path, WCHAR *drive, WCHAR *dir, WCHAR *name, WCHAR *ext)
которые напрямую используют вышеуказанные функции и при обращении к ним приложение падает.


Пример простого приложения, которое не собирается:
Код
#include <assert.h>
#include <iostream>
#include "mapapi.h"

int main(int argc, char *argv[])
{
    WCHAR dst[10];
    WCHAR src[10];
    src[0] = 10;
    src[1] = 13;
    wcsncpy(&dst[0], &src[0], 5);
    return 0;
 }

main.cpp: error: undefined reference to `wcsncpy(unsigned short*, unsigned short const*, int)' 

В pro-файле указаны пути, куда устанавливаются заголовочные файлы и имя линкуемой библиотеки:
Код
INCLUDEPATH += /usr/share/qt4/include
LIBS += -lqdmapacces

TEMPLATE = app

SOURCES += main.cpp

Спасибо.
 
Здравствуйте!

В данной версии ГИС Конструктор функции SplitThePath и MakeThePath не могут вызываться из состава ГИС-приложения.
Для конвертирования строк из char в WCHAR и обратно можно использовать функции StringToUnicode и UnicodeToString.

Для использования функций SplitThePath и MakeThePath мы можем предложить Вам:
- использовать обновленную версию ГИС Конструктор версии 11 (для получения необходимо написать запрос на нашу почту panorama@gisinfo.ru);
- выполнить обновление до ГИС Конструктор версии 12.
 
Цитата
Александр Савелов написал:
В данной версии ГИС Конструктор функции SplitThePath и MakeThePath не могут вызываться из состава ГИС-приложения.
SplitThePath я привел в качестве примера. Т.к. не могу понять, почему в бибилотеке iml, собранной на той же версии ГИС-Конструктора команда
Цитата
LD_PRELOAD=/usr/lib/qdmapacces.so ldd -r libname.iml64
выдает ошибку
Цитата
undefined symbol: _Z7wcsncpuPtPKti
Интерфейс на которую есть в MAPAPI.
 
Здравствуйте!

Данное поведение связано с тем, что функция wcsncpy собрана в составе библиотеки mapacces с входными параметрами типа wchar_t.
В Вашем приложении используется тип WCHAR, который в данном случае является синонимом unsigned short.

Данное объявление реализовано в mapsyst.h:
Код
#ifdef BUILD_DLL                      
  // С BUILD_DLL транслируются только библиотеки ядра
  // вместе с опцией компилятору -fshort-wchar, что
  // означает размер wchar_t равен 2 байтам
  typedef wchar_t  WCHAR;
#else
  typedef WORD     WCHAR;
#endif
Для того, чтобы в Вашем приложении так же использовался тип wchar_t, необходимо добавить при сборке компилятору флаги -fshort-wchar и -DBUILD_DLL.
В качестве примера привожу Makefile для iml-библиотеки rscarmy (исходные тексты доступны в инсталляции ГИС Конструктор 12 с нашего сайта: https://gisinfo.ru/download/download_linux.htm#5):
Код
MAKE= make -${MAKEFLAGS}

OBJ =  imlline.o imlsemn.o imlserv.o imlsquare.o \
       rscarmy.o imlmain.o armydop.o semmain.o semkey.o

CPP =   ../imlcomm/imlline.cpp ../imlcomm/imlsemn.cpp ../imlcomm/imlserv.cpp ../imlcomm/imlsquare.cpp \
       rscarmy.cpp imlmain.cpp armydop.cpp semmain.cpp semkey.cpp

all:rscarmy.iml

ifeq ($(NAME_OS),MCBC_3.0)
LIBRSCARMY_NAME=rscarmy.iml
else
LIBRSCARMY_NAME=rscarmy.iml64
endif

rscarmy.iml:$(OBJ)
        g++ -shared -o $(LIBRSCARMY_NAME) $(OBJ)

$(OBJ): 
        g++ -I../imlcomm -I../. ./include -DSHORT_WCHAR -fshort-wchar -DLINUXAPI -DHIDEMAXMIN -DBUILD_DLL -finput-charset=KOI8-R -fexec-charset=KOI8-R -fPIC -c $(CPP)

save:
        ./save.bat

clean:
        -rm *.o *.a *.iml*
Страницы: 1
Читают тему (гостей: 1)



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

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