Компиляция библиотеки (redland) в Cygwin с использованием gcc и вывода в Visual Studio (C++)

В настоящее время я пытаюсь скомпилировать Redland (librdf http://librdf.org/) под Windows. Согласно их веб-сайту, он должен собираться под Windows. Поскольку я не хочу тратить свое время на исправление.sln, я подумал о компиляции librdf (и необходимых проектов) в cygwin, а затем использовал библиотеку в visual studio.

Итак, мой вопрос: можно ли использовать библиотеки компиляции в Cygwin в приложении Windows? И если так, как?

Поскольку я являюсь разработчиком Windows, я не знаю, есть ли какая-либо разница между созданными.a файлами и.dll. Я уже перечитал тему, и необходимо будет включить cygwin1.dll в проект, но это не будет проблемой.

Или кто-нибудь есть идеи лучше, как я могу скомпилировать Redland как Windows DLL? Я думал об использовании mingw, но до сих пор мне не удавалось его скомпилировать.

Любая помощь будет оценена.

Спасибо

Обновить:

Благодаря помощи Яакова (и его довольно классных портов cygwin) мне удалось собрать raptor (что является обязательным условием для librdf). Все, что мне нужно было сделать, это включить еще один аргумент для настройки: --with-xml2-config=/usr/x86_64-w64-mingw32/sys-root/mingw/bin/xml2-config

Теперь я пытаюсь скомпилировать rasqal, который является еще одним запрашиваемым и также зависит от raptor2. Чтобы это работало, мне пришлось экспортировать PKG_CONFIG_PATH="/usr/x86_64-w64-mingw32/sys-root/mingw/lib/pkgconfig/" для pkg-config, чтобы найти правильную установку raptor.

Так что настройка для rasqal работает, но когда я пытаюсь это сделать, я получаю следующую ошибку:

Making all in src
make[1]: Entering directory `/home/Stefan/workspace/rasqal/src'
make  all-am
make[2]: Entering directory `/home/Stefan/workspace/rasqal/src'
/bin/sh ../libtool  --tag=CC    --mode=compile x86_64-w64-mingw32-gcc -DHAVE_CONFIG_H  -I.   -DRASQAL_INTERNAL=1   -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/raptor2       -g -O2   -DMTWIST_CONFIG -I../libmtwist -g -O2 -MT rasqal_algebra.lo -MD -MP -MF .deps/rasqal_algebra.Tpo -c -o rasqal_algebra.lo rasqal_algebra.c
libtool: compile:  x86_64-w64-mingw32-gcc -DHAVE_CONFIG_H -I. -DRASQAL_INTERNAL=1 -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/raptor2 -g -O2 -DMTWIST_CONFIG -I../libmtwist -g -O2 -MT rasqal_algebra.lo -MD -MP -MF .deps/rasqal_algebra.Tpo -c rasqal_algebra.c  -DDLL_EXPORT -DPIC -o .libs/rasqal_algebra.o
In file included from /usr/x86_64-w64-mingw32/sys-root/mingw/include/sys/time.h:10:0,
                 from rasqal.h:116,
                 from rasqal_algebra.c:39:
/usr/x86_64-w64-mingw32/sys-root/mingw/include/time.h:260:8: error: redefinition of 'struct timezone'
./win32_rasqal_config.h:62:8: note: originally defined here
Makefile:1045: recipe for target `rasqal_algebra.lo' failed
make[2]: *** [rasqal_algebra.lo] Error 1
make[2]: Leaving directory `/home/Stefan/workspace/rasqal/src'
Makefile:720: recipe for target `all' failed
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/Stefan/workspace/rasqal/src'
Makefile:484: recipe for target `all-recursive' failed
make: *** [all-recursive] Error 1

Что я не могу придумать, я на самом деле не кросс-компиляции. Может ли кто-нибудь указать мне правильное направление?

2 ответа

Среды выполнения MSVC и Cygwin несовместимы, поэтому вы не можете использовать скомпилированный Cygwin двоичный файл в VS. Однако вы можете использовать Cygwin для кросс-компиляции библиотеки для Windows, которая для библиотек C должна быть совместима с VS. (C++ очень специфичен для компилятора, особенно с разбивкой символов, но IIRC все эти библиотеки находятся на C.)

Для начала вам необходимо установить mingw64-i686-gcc-core, mingw64-i686-headers, а также mingw64-i686-runtime пакеты, плюс все зависимости, через Cygwin's setup.exe Установщик. Затем, начиная с "основания" цепочки зависимостей, создайте каждую библиотеку, например:

./configure --prefix=/usr/i686-w64-mingw32/sys-root/mingw --host=i686-w64-mingw32

Тогда беги make с последующим make install, Для Windows x64 замените все i686выше с x86_64,

Имейте в виду, что librdf имеет много (под) зависимостей, но я не помню, сколько из них необязательно. Некоторые из них, но не все, доступны в репозитории Cygwin Ports; это должно по крайней мере помочь вам начать.

Я рекомендую вам собрать raptor2 с помощью Visual Studio. Я сделал это успешно для Visual Studio 2017 x64 следующим образом:

Установите libxml2 и libxslt

Откройте PowerShell:

git clone https://github.com/Microsoft/vcpkg
cd vcpkg
.\bootstrap-vcpkg.bat
.\vcpkg install libxml2:x64-windows
.\vcpkg install libxslt:x64-windows

Сборка raptor2

Загрузить raptor: http://librdf.org/raptor/ ( http://download.librdf.org/source/raptor2-2.0.15.tar.gz)

Измените raptor2-2.015/CMakeLists.txt, строка 258:

ADD_DEFINITIONS(-DHAVE_CONFIG_H)
->
ADD_DEFINITIONS(-DHAVE_CONFIG_H -DYY_NO_UNISTD_H)

измените raptor2-2.015/src/CMakeLists.txt, строка 118:

ADD_LIBRARY(raptor2
    raptor_avltree.c
    ...
->
ADD_LIBRARY(raptor2
    raptor_escaped.c
    sort_r.c
    raptor_ntriples.c
    raptor_avltree.c
    ...

открыть cmake: установить LIBXML2_INCLUDE_DIR в: путь / к /vcpkg/ установлен /x64-windows/ включить установить для LIBXML2_LIBRARIES значение: путь / к /vcpkg/ установлен /x64-windows/lib/libxml2.lib

set LIBXSLT_INCLUDE_DIR to: path/to/vcpkg/installed/x64-windows/include
set LIBXSLT_LIBRARIES to: path/to/vcpkg/installed/x64-windows/lib/libxlst.lib
set LIBXSLT_EXSLT_LIBRARY to: path/to/vcpkg/installed/x64-windows/lib/libexlst.lib

Развертывание:

Задавать CMAKE_INSTALL_PREFIX к вашему пути delyoment, например C:\thirdparty\vs2017\x64\raptor2

Выполнить INSTALL цель в Visual Studio.

Если вам не нравится выполнять эти шаги вручную, вы можете просто скачать предварительно собранную версию здесь.

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