D:如何使用D绑定到C ++ lib?

时间:2015-04-09 14:24:02

标签: c++ binding d gdal dub

我发现我绑定到名为GDAL的lib非常需要。 https://github.com/craig-dillabaugh/gdal

没有关于它的使用示例的问题。在我从未使用任何绑定之前。

dub.json包含下一个字符串: "libs" : ["gdal"]

所以它似乎需要具有此名称的lib文件。

在旧的commits我找到了没有配音的编译示例:dmd test_gdal_d.d gdal.d -L-ldgal

原始gdal distrib不包含具有此名称的lib。只有gdal111.dll lib。 所以我用implib转换为gdal111.lib。使用命令implib /s gdal111.lib gdal111.dll

从11MB开始lib变为1MB大小。

使用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 个答案:

答案 0 :(得分:2)

写下我们从这里的评论中得到的解决方案:

首先,您需要创建lib文件。可以在此处下载implib ftp.digitalmars.com/bup.zip,然后在dll implib /s ldgal.lib ldgal.dll上运行它以生成导入库。

一旦完成,您需要将其添加到构建中。有两种方法可以做到这一点:将ldgal.lib添加到dmd命令行的末尾(没有任何其他开关,只需添加文件,dmd将看到它是.lib并做正确的事)或添加pragma(lib, "ldgal");到您的主要源文件。