Компиляция FreeType в DLL (в отличие от статической библиотеки)

Я хочу использовать FreeType в проекте aC#. Я нашел эту привязку, но мне все еще нужен freetype.dll. Я обычно использую статическую библиотеку в своих проектах на C++, поэтому я никогда ее не компилировал. Открывая freetype-решение (VS2010), я заметил, что для динамической библиотеки нет конфигурации - только статические. Я попытался сделать свою собственную конфигурацию и получил ее для создания freetype.dll. Если я использую это с привязкой C#, я получаю исключение, что точка входа FT_Init_FreeType не была найдена. Любая идея, как я должен настроить проект freetype, чтобы экспортировать эти функции?

2 ответа

Решение

Если у вас все в порядке со старой версией (март 2008), вы можете перейти на страницу FreeType для Windows, загрузить последний пакет Binaries, открыть.ZIP и извлечь FreeType6.dll из каталога bin. Просто переименуйте его соответствующим образом.

Если вам нужна более свежая версия, вот как вы можете скомпилировать последнюю версию:

  • загрузите последний источник (2.4.6 на сегодняшний день) с http://sourceforge.net/projects/freetype/files/freetype2/

  • откройте Visual Studio 2010 и загрузите freetype.sln от builds\win32\vc2010 каталог.

  • откройте конфигурацию проекта и в General вкладка, изменить Configuration Type в Dynamic Library (.dll)

  • Открой ftoption.h файл и добавьте эти строки (например, рядом с разделом примечаний "Компиляция экспорта DLL"):

    #define FT_EXPORT(x)  __declspec(dllexport) x
    #define FT_BASE(x)    __declspec(dllexport) x
    
  • измените конфигурацию проекта на "Release".

  • скомпилировать проект. Теперь вы должны иметь freetype246.dll в objs\win32\vc2010 каталог.

Держу пари, что проблема в том, что ваш проект DLL не экспортирует никаких символов, поэтому, пока весь код находится там, адреса символов не находятся в таблице экспорта, поэтому никто не может получить к ним извне.

Этот вопрос имеет хорошее решение для экспорта всех символов в.dll без необходимости перечислять их вручную.

Будущее здесь. Это для будущих читателей этой ветки.

FT2 поддерживает создание статической и динамической библиотеки. У них есть готовые решения, которые можно найти вbuilds каталог.

Если вы вынуждены использовать CMAKE, вам придется сделать то, что делает принятый ответ. Однако это уже не актуально. Мне не удалось найти указанный файл, который ссылается на dll.(near the "DLL export compilation" remarks section for example):. Сейчас он находится по адресуfreetype-x.x.x\include\freetype\config\ftconfig.h около строки 424. Я использую 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 и в разделе Project Defaults -> Configuration Type -> установите значение Dynamic Library (.dll)

Убедитесь, что выбран Release, а затем Build -> Build freetype. В каталоге build, в котором есть решения, в Release у вас будет вашfreetype.dll а также freetype.libфайлы для использования. Вам понадобятся все это и всеfreetype-.x.x.x\include.

Удачи:)

Другие вопросы по тегам