我想在c#项目中使用FreeType。我发现了这个binding,但我仍然需要一个freetype.dll。我通常在我的c ++项目中使用静态库,所以我从来没有编译过。打开freetype-solution(VS2010)我注意到动态库没有配置 - 只是静态库。我尝试自己配置并生成一个freetype.dll。如果我将它与c#-binding一起使用,我得到一个异常,那就是找不到FT_Init_FreeType入口点。知道如何调整freetype-project以导出这些函数吗?
答案 0 :(得分:37)
如果您对旧版本(2008年3月)感到满意,可以转到FreeType for Windows页面,下载最新的Binaries包,打开.ZIP,然后从bin目录中提取FreeType6.dll。只需适当地重命名即可。
如果您需要更新版本,请按以下步骤编辑最新版本:
打开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.dll
和freetype.lib
文件。您将需要这些以及所有freetype-.x.x.x\include
。
祝你好运:)