Linker 如何在D中使用C静态库?
如何将FreeType 2.4.8编译为静态库,并在Windows中的D应用程序中使用,这让我感到十分困惑。我试着用objconv、coff2omf运行它,并尝试Linker 如何在D中使用C静态库?,linker,static-libraries,d,Linker,Static Libraries,D,如何将FreeType 2.4.8编译为静态库,并在Windows中的D应用程序中使用,这让我感到十分困惑。我试着用objconv、coff2omf运行它,并尝试extern(C)/extern(System)等等,但似乎没有任何效果。我发现了符号未找到错误、访问冲突和一些无用的错误 我怎样才能解决这个问题?我使用pragma lib链接到我的静态库是否正确,以及如何可靠地将COFF静态库转换为DMD/Optlink可以使用的OMF 编辑:我尝试过的一些例子: 将VS2010作为静态库编译Fre
extern(C)
/extern(System)
等等,但似乎没有任何效果。我发现了符号未找到错误、访问冲突和一些无用的错误
我怎样才能解决这个问题?我使用pragma lib
链接到我的静态库是否正确,以及如何可靠地将COFF静态库转换为DMD/Optlink可以使用的OMF
编辑:我尝试过的一些例子:
DMD file1.d file2.dc:/path/to/freetype.lib
应该可以工作
编辑:
我错了。很明显,我需要阅读一些关于这个项目的文档。
<强>引用:微软COFF格式明显改变了Visual C++ 6。要在更新格式的.lib文件上使用coff2omf,请使用Microsoft的链接器将文件转换为早期的COFF格式:
因此,根据上面的陈述判断,您需要执行两个步骤
coff2omf freetype.lib
将静态库转换为OMF格式我很确定Derelict2有FreeType绑定:(参见DerelictFT)。你能给我们举一个你尝试过的最简单的例子吗?e、 g.声明一个函数原型,并用示例程序演示您得到的错误。此外,如果您向我们展示您使用静态库(尝试将其从COFF转换为OMF)所做的尝试,那么这也会有所帮助。当然,让我举一些例子。Windows上的静态库可能是一个PITA。最简单的方法是始终使用动态库+implib。如果使用C++,那么创建的DLL会工作吗?如果是,你能显示你的C++和D代码吗?请注意,extern(System)在Windows上表示extern(Windows),在Linux上表示extern(C)。如果构建静态FreeType库,只需将其添加到源文件列表中即可。示例:
dmdfile1.dfile2.dc:/dev/proj/freetype.lib
@DejanLekic:祝你好运。GDC二进制文件需要“libcloog-0.dll”,这在4.5.2 TDM bundle安装程序中找不到。更不用说TDM页面上指向单个软件包的链接有一半已经失效。他在OP中说,他在尝试链接时出现了“库格式未知”错误。错误的是,他使用VS编译,因此得到了一个COFF库,而dmd只接受蹩脚的OMF格式。公平的说,我很久没有做Windows编程了。。。是时候我再次开始这样做了。:)感谢大家的支持。我如何获得Microsoft链接实用程序的副本?链接是链接器。它必须是任何Microsoft(R)Visual C++(TM)发行版的一部分。它也应该是PSDK的一部分。是的,但是他们使用动态库,而且他们使用的FreeType版本已经很过时了(我相信是2.3.5,而FreeType目前是2.4.8)。看来你是对的,它已经过时了。有一个古老的FreeType绑定仍然存在:所以OP可以看看他们是如何使用DLL的。静态链接可能会很困难,因为DMD使用OMF。最可靠的方法是通过DMC编译FreeType。也许这是可能的。否则OP可能会显示他正在使用的代码,以便我们知道问题是在DLL还是调用代码中。或者,忘记在Windows上使用DMD而使用GDC编译器?
link /lib /convert freetype.lib