Компиляция libexif как статической библиотеки lib с Visual Studio 2010 - затем ссылка из проекта Visual C++

Можно ли скомпилировать libexif с помощью Visual Studio 2010? Я пытался сделать это и столкнулся с целым рядом проблем. Я не могу найти никакой информации о том, успешно ли кто-либо делал это раньше. Я знаю, что могу использовать MinGW для компиляции библиотеки, но я нахожусь в ситуации, когда мне нужно, чтобы она была скомпилирована с Visual Studio, а затем мне нужно было ссылаться на нее из приложения Visual C++. Это возможно?

2 ответа

Решение

Прочитайте файл "readme-win32.txt". Совет это:

взломайте себе систему сборки как-нибудь.
Похоже, это способ работы Windows.

Не надейтесь. * Nix - это скрипт конфигурации, который нужно запустить первым. Он автоматически генерирует исходные файлы, чтобы объединить библиотеку со специфической разновидностью * nix. Скрипт конфигурации составляет почти половину мегабайта. В три раза больше кода, чем в реальных.c файлах:) Без MinGW вы не сможете разумно заставить это работать, поэтому вы можете выполнить скрипт. Как только вы это сделали, у вас получится лучше с помощью решения VS. Пока это не использует слишком много специфического синтаксиса C99.

Чтобы ответить на ваш вопрос: да, это возможно... но это немного взломать. Libexif использует функции, которые MSVC решил не реализовывать. Посмотрите мой рабочий пример проекта VS2010 ниже (если вам не нравится скачивать файлы, перейдите к моему объяснению того, что нужно изменить, чтобы заставить его работать ниже):

https://www.dropbox.com/s/l6wowl8pouux01a/libexif-0.6.21_CompiledInVS2010%2BExample.7z?dl=0

Чтобы уточнить, проблемы, которые требовали "взлома" (как указано в документации по readme-win32.txt в LibExif):

  • Libexif использует inline в нескольких местах, которые не определены в VS для C, только C++ (см. Это)

  • Libexif широко использует snprintf в коде, который не определен в VS (см. Здесь)

  • Вам нужно создать config.h самостоятельно, без помощи команды./configure. Вы можете прочитать сценарий, но большинство из них не имеет смысла для Windows VS2010.

  • Вам нужно будет определить GETTEXT_PACKAGE, потому что он, вероятно, настроен в файле конфигурации. Я просто выбираю UTF-8, верно это или нет, я не уверен.

  • Была случайная статическая * без знака *, которую нужно было переместить из файла.c в файл.h, так как C в VS не позволяет вам создавать новые переменные внутри функций тем способом, который они пытались сделать.

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