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

Статическая линковка GIS ToolKit

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Статическая линковка GIS ToolKit
 
Я пытаюсь собрать программу с вашей библиотекой GIS ToolKit.
Библиотеку получается использовать только через динамическою загрузкой(Qt QLibrary). Но это не удобно слишком много букв приходится писать, особено для Qt. Попытки адаптировать вашу библиотеку для статической линковки с помощью def файла не получаются(dlltool).
Основная проблема названия функций(Borland ?).
Я использую Qt 4.8, mingw32(x32). Приложение должно работать на win32 и linux.

Подскажите как осуществить статическую линковку вашей библиотеки?
 
Здравствуйте, Артем!

Попробуйте создать библиотеку импорта следующим образом:
- содержимое def-файла (дополнить список необходимыми функциями):
Код
LIBRARY gisacces.dll

EXPORTS
   mapOpenData@8

- получение библиотеки
Код
dlltool -k -d gisacces.def -l libgisacces.a
Изменено: Александр Савелов - 25.06.2014 13:56:12
 
mapOpenData@8
- 8 количество байт для параметров?
libgisacces.a - lib  приставка обязательна?
Изменено: Артем - 25.06.2014 14:17:56
 
Да. В def-файл заносятся все ошибки линковщика вида
Код
undefined reference to `mapOpenData@8'

Префикс "lib" обязателен.
Изменено: Александр Савелов - 25.06.2014 14:30:00
 
Спасибо за помощь.

Вдруг кому еще понадобится:
- в консоли запустить
for %%i  in (*.dll) do pexports.exe %%i > %%~ni.def
Запуск в папке с .dll, будут созданы .def.
- очистить полученные файлы скриптом(запускается в папке с файлами .def) на python33
Код
import glob  
import os 
path = os.getcwd()  + '\*.def' 
files=glob.glob(path)   
for file in files:     
   f=open(file, 'r')
   print(file)
   z = []
   tmp = f.readlines()
   for line in tmp:
      if(line[0]=='?')or(line[0]=='_')or(line[0]=='@')or(line[0]=='$'):         
         tmp.remove(line)
      else:      
         z.append(line)      
   f.close() 
   f=open(file, 'w+')      
   for line in z:
      f.write(line)         
   f.close()


- отредактировать названия функций в файлах текстовым редактором.
названия функций должны быть : mapOpenData@8
эти названия выдаст линкер(названия с приставками и суффиксами).
- запустить в консоли
for %%i  in (*.def) do dlltool.exe -k -d %%i -l lib%%~ni.a
- теперь можно собирать проект.
Страницы: 1
Читают тему (гостей: 1)



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

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