Visual studio 2010 将FreeType编译为DLL(与静态库相反)
我想在c项目中使用FreeType。我找到了这个,但我仍然需要一个freetype.dll。我通常在C++项目中使用静态库,所以我从不编译一个。打开freetype解决方案VS2010,我注意到没有动态库的配置,只有静态库。我尝试进行自己的配置,并让它生成一个freetype.dll。如果我将它与c绑定一起使用,我会得到一个异常,即找不到FT_Init_FreeType-entry点。知道我必须如何调整freetype项目才能导出这些函数吗?如果您对2008年3月的旧版本满意,您可以转到第页,下载最新的二进制文件包,打开.ZIP,然后从bin目录中提取FreeType6.dll。只需适当地重命名它 如果您需要最新版本,以下是如何编译最新版本: 从以下位置下载最新的源代码2.4.6 打开Visual Studio 2010,并从builds\win32\vc2010目录加载freetype.sln 打开项目配置,在常规选项卡中,将配置类型更改为Dynamic Library.dll 打开ftoption.h文件,并在DLL导出编译备注部分附近添加以下行,例如:Visual studio 2010 将FreeType编译为DLL(与静态库相反),visual-studio-2010,dll,compilation,freetype,Visual Studio 2010,Dll,Compilation,Freetype,我想在c项目中使用FreeType。我找到了这个,但我仍然需要一个freetype.dll。我通常在C++项目中使用静态库,所以我从不编译一个。打开freetype解决方案VS2010,我注意到没有动态库的配置,只有静态库。我尝试进行自己的配置,并让它生成一个freetype.dll。如果我将它与c绑定一起使用,我会得到一个异常,即找不到FT_Init_FreeType-entry点。知道我必须如何调整freetype项目才能导出这些函数吗?如果您对2008年3月的旧版本满意,您可以转到第页,下
#define FT_EXPORT(x) __declspec(dllexport) x
#define FT_BASE(x) __declspec(dllexport) x
将项目编译配置更改为Release
编译项目。现在,在objs\win32\vc2010目录中应该有一个freetype246.dll
我敢打赌,问题是DLL项目没有导出任何符号,所以当所有代码都在其中时,符号的地址不在导出表中,因此没有人可以从外部访问它们
有一个很好的解决方案,可以导出.dll中的所有符号,而不必手动列出它们。这里的未来。这是给这篇文章的未来读者的 FT2支持创建静态和动态库。他们有预先制作的解决方案,可以在builds目录中找到 如果您被迫使用CMAKE,则必须按照公认的答案进行操作。然而,它不再是当前的。我在dll导出编译备注部分附近找不到引用dll的文件,例如:。它现在位于第424行附近的freetype-x.x.x\include\freetype\config\ftconfig.h。我正在使用MSVS 2017,所以请尝试跟随
mkdir build
cd build
cmake -G "Visual Studio 15 2017 Win64" ..
打开freetype-x.x.x\include\freetype\config\ftconfig.h并在第424行附近,在以下位置修补_udeclspecdllexport:
打开CMAKE生成的名为freetype.sln的解决方案。在类视图中选择freetype。项目->属性->常规->目标扩展->设置为.dll,在项目默认值->配置类型->设置为动态库.dll下
确保发布版本为“选择并构建->构建自由类型”。在包含解决方案的“build”目录中,在发行版中,您将使用freetype.dll和freetype.lib文件。您将需要这些以及所有freetype-.x.x.x\include
祝你好运:这些二进制文件来自2008年3月9日版本2.3.5。。。目前的版本是2.4.6…@Titusz-很好。我已经更新了我的答案。但是,如果你是落选者,最好确保问题完整,这样我们在回答之前就知道了整个情况。这非常有效。。。非常感谢你。。。赏金来之不易;。如果要导出所有内容,ftoption.h中应该有第三个define:define FT_export_DEFx_udeclspecdllexport x。有人知道为什么freetypecmakelists.txt主动禁止与MSVC建立共享库,尽管这个答案显示了这是多么微不足道的事情吗?
...
/* You can provide your own implementation of `FT_EXPORT` and */
/* `FT_EXPORT_DEF` here if you want. */
/* */
/* To export a variable, use `FT_EXPORT_VAR`. */
/* */
// This is due to FT_EXPORT and FT_BASE not generating a .lib file, just a .dll
#ifdef FT_EXPORT
#undef FT_EXPORT
#define FT_EXPORT(x) __declspec(dllexport) x
#endif
#ifdef FT_BASE
#undef FT_BASE
#define FT_BASE(x) __declspec(dllexport) x
#endif
#ifndef FT_EXPORT
...