簡體   English   中英

D:如何使用D對C ++ lib進行綁定?

[英]D: How to use binding to C++ lib with D?

我發現非常需要綁定到名為GDAL的庫。 https://github.com/craig-dillabaugh/gdal

沒有用法示例的問題。 在此之前,我從未使用過任何綁定。

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

因此,似乎它需要具有此名稱的lib文件。

在舊的提交中,我找到了沒有配音的編譯示例: dmd test_gdal_d.d gdal.d -L-ldgal

原始gdal distrib不包含具有此類名稱的lib。 只有gdal111.dll庫。 所以我用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。

從這里的評論中寫出我們匯總的解決方案:

首先,您需要制作lib文件。 implib可以在這里下載ftp.digitalmars.com/bup.zip,你只是在DLL運行它, implib /s ldgal.lib ldgal.dll生成導入庫。

完成后,您需要將其添加到構建中。 有兩種方法:將ldgal.lib添加到dmd的命令行末尾(不添加任何其他開關,只需添加文件,dmd將看到它是一個.lib並做正確的事情)或添加pragma(lib, "ldgal"); 到您的主要源文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM