将FreeType编译为DLL(与静态库相对)

时间:2011-06-01 20:23:01

标签: visual-studio-2010 dll compilation freetype

我想在c#项目中使用FreeType。我发现了这个binding,但我仍然需要一个freetype.dll。我通常在我的c ++项目中使用静态库,所以我从来没有编译过。打开freetype-solution(VS2010)我注意到动态库没有配置 - 只是静态库。我尝试自己配置并生成一个freetype.dll。如果我将它与c#-binding一起使用,我得到一个异常,那就是找不到FT_Init_FreeType入口点。知道如何调整freetype-project以导出这些函数吗?

3 个答案:

答案 0 :(得分:37)

如果您对旧版本(2008年3月)感到满意,可以转到FreeType for Windows页面,下载最新的Binaries包,打开.ZIP,然后从bin目录中提取FreeType6.dll。只需适当地重命名即可。

如果您需要更新版本,请按以下步骤编辑最新版本:

  • http://sourceforge.net/projects/freetype/files/freetype2/

    下载最新来源(截至今日为2.4.6)
  • 打开Visual Studio 2010,并从freetype.sln目录加载builds\win32\vc2010

  • 打开项目配置,然后在General标签中,将Configuration Type更改为Dynamic Library (.dll)

  • 打开ftoption.h文件,然后添加这些行(例如“DLL export compilation”备注部分附近):

    #define FT_EXPORT(x)  __declspec(dllexport) x
    #define FT_BASE(x)    __declspec(dllexport) x
    
  • 将项目编译配置更改为“Release”。

  • 编译项目。您现在应该在freetype246.dll目录中有一个objs\win32\vc2010

答案 1 :(得分:1)

我打赌问题是你的DLL项目没有导出任何符号,所以当所有代码都在那里时,符号的地址不在导出表中,所以没有人可以从外部。

This question有一个很好的解决方案,可以导出.dll中的所有符号而无需手动列出它们。

答案 2 :(得分:1)

这里的未来。这是给该线程的未来读者的。

FT2支持创建静态和动态库。它们具有预制的解决方案,可以在builds目录中找到。

如果您被迫使用CMAKE,则必须做被接受的答案。但是,它不再是当前的。我找不到引用dll (near the "DLL export compilation" remarks section for example):的文件。现在它位于第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行附近,将__declspec(dllexport)所在的位置修补:

...
  /* 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
...

打开由CMAKE生成的名为freetype.sln的解决方案。在类视图中选择freetype。项目->属性->常规->目标扩展->设置为.dll,在项目默认值下->配置类型->设置为Dynamic Library (.dll)

确保选择Release,然后选择Build-> Build freetype。在具有解决方案的'build'目录中,在Release中,您将使用freetype.dllfreetype.lib文件。您将需要这些以及所有freetype-.x.x.x\include

祝你好运:)