Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 将FreeType编译为DLL(与静态库相反)_Visual Studio 2010_Dll_Compilation_Freetype - Fatal编程技术网

Visual studio 2010 将FreeType编译为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月的旧版本满意,您可以转到第页,下

我想在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导出编译备注部分附近添加以下行,例如:

#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
...