D: Как использовать привязку к C ++ lib с D?

Я нашел очень необходимое для моей привязки к lib с именем GDAL.
https://github.com/craig-dillabaugh/gdal

Проблема в том, что нет примеров его использования. Раньше я никогда не использовал привязки.

dub.json включает следующую строку:
"libs" : ["gdal"]

Так что, похоже, нужен файл lib с таким именем.

В старом совершает Я нашел пример компиляции без дублирования: dmd test_gdal_d.d gdal.d -L-ldgal

Оригинальный дистрибутив gdal не включает lib с таким именем. Есть только gdal111.dll Lib.
Так что я преобразовал это с implib в gdal111.lib, С командой implib /s gdal111.lib gdal111.dll

Из 11 МБ размер файла становится 1 МБ.

С Dependency Walker я просмотрел таблицу символов. Это есть символы, такие как GDALGetRasterXSize
Я пытаюсь собрать все с помощью следующей команды:

dmd D:\code\binding\gdal-master\gdal-master\source\App.d D:\code\binding\gdal-master\gdal-master\source\gdal.d -L -Igdal111.lib

но я получаю следующую ошибку:

D:\code\binding\gdal-master\gdal-master>dmd D:\code\binding\gdal-master\gdal-master\source\App.d D:\code\binding\gdal-master\gdal-master\source\gdal.d -L -Igdal111.lib
OPTLINK (R) for Win32 Release 8.00.17
Copyright (C) Digital Mars 1989-2013 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
App.obj(App)
Error 42: Symbol Undefined _GDALClose
App.obj(App)
Error 42: Symbol Undefined _GDALGetRasterCount
App.obj(App)
Error 42: Symbol Undefined _GDALGetRasterXSize
App.obj(App)
Error 42: Symbol Undefined _GDALGetRasterYSize
App.obj(App)
Error 42: Symbol Undefined _GDALOpen
App.obj(App)
Error 42: Symbol Undefined _GDALAllRegister
App.obj(App)
Error 42: Symbol Undefined _GDALIdentifyDriver
App.obj(App)
Error 42: Symbol Undefined _GDALCreate
--- errorlevel 8

Я положил архив со всеми вещами здесь http://dlang.ru/gdal-d-binding.zip

UPD: Я получил GDAL запустить!

Я хочу добавить строку:
pragma( lib, "libgdal.lib" ); на пример, и он запускается. В скором времени я надеюсь добавить код на github.

1

Решение

составляя решение, которое мы собрали из комментариев здесь:

Во-первых, вам нужно сделать файл lib. implib можно скачать здесь ftp.digitalmars.com/bup.zip и просто запустить его на dll, implib /s ldgal.lib ldgal.dll создать библиотеку импорта.

Как только это будет сделано, вам нужно добавить его в сборку. Есть два способа сделать это: добавить ldgal.lib в конце командной строки для dmd (без каких-либо других ключей просто добавьте файл, dmd увидит, что это .lib и сделает правильные вещи) или добавьте pragma(lib, "ldgal"); в ваш основной исходный файл.

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector