在Cygwin中使用gcc编译一个库(redland),并在Visual Studio (c++)中使用输出



我目前正在尝试在Windows下编译redland (librdf http://librdf.org/)。根据他们的网站,它应该在Windows下构建。由于我不想花时间修复。sln,我考虑在cygwin中编译librdf(和必要的项目),然后在visual studio中使用该库。

我的问题是:是否可以在windows应用程序中使用cygwin中的库编译?如果是,那又是怎么回事呢?

因为我是一个windows开发人员,我不知道从创建的。a文件到。dll是否有任何区别。我已经阅读了这个主题,有必要在项目中包括cygwin1.dll,但这不会是一个问题。

或者谁有更好的主意,我怎么才能得到红土地编译为windows dll ?我想使用mingw,但直到现在我还没有设法编译它。

任何帮助都将不胜感激。

感谢

更新:

感谢Yaakov的帮助(以及他非常酷的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

我无法理解,我不太喜欢交叉编译。有人能给我指个正确的方向吗?

MSVC和Cygwin运行时不兼容,所以你不能在vs中使用Cygwin编译的二进制文件。然而,你可以使用Cygwin交叉编译Windows的库,而对于C库,应该与vs兼容(c++是非常特定于编译器的,特别是符号修改,但是IIRC这些库都是C)

要开始,您需要通过Cygwin的setup.exe安装程序安装mingw64-i686-gcc-core, mingw64-i686-headersmingw64-i686-runtime包,以及所有依赖项。然后,从依赖链的"底部"开始,构建每个库,例如:

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

然后依次执行makemake install。对于Windows x64,将上面所有的i686替换为x86_64

请记住,librdf很多(子)依赖项,但我现在不记得有多少是可选的。其中一些(但不是全部)可以从Cygwin Ports存储库中获得;这些至少可以帮助你开始。

我建议您使用Visual Studio构建raptor2。我在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

下载猛禽: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设置为:path/to/vcpkg/installed/x64-windows/include设置LIBXML2_LIBRARIES为:path/to/vcpkg/installed/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设置为您的部署路径,例如C:thirdpartyvs2017x64raptor2

在Visual Studio中执行INSTALL目标。

如果您不喜欢手动执行这些步骤,您可以在这里下载预构建版本。

相关内容

  • 没有找到相关文章

最新更新