在Windows平台上构建JSON-C

问题描述 投票:0回答:1

声明:请仔细阅读问题,本题有一个转折,所以要读到最后。

所以 JSON-C 是一个非常受欢迎的图书馆工作。JSON 使用C语言编程。对目前的工作进行基本说明,不管这里的代码构建是针对多平台的。目前Linux & Windows是支持的平台,我对Windows相关的JSON-C部分有一个小问题。

我正在使用Cygwin进行Windows开发,当我按照GitHub页面上提供的说明,使用CMAKE编译JSON-C代码时,效果不错,构建系统能够生成Windows的DLL。但如果你使用过Cygwin,那么你一定知道,无论使用Cygwin构建的是什么,都会对它的运行时环境(cygwin1.dll)产生依赖。为什么GCC-Windows要依赖于cygwin?),而且它不会是一个独立的DLL,可以在相同架构的不同系统上移动。因此,如果我的项目是在Windows平台上建立的,我必须携带Cygwin运行时环境,或者我必须确保Cygwin安装在目标系统上以保证顺利执行,这种对Cygwin的依赖性是我不希望看到的。我不希望我的项目有这样的依赖性,这会破坏用户体验。

所以我想在这里得到帮助。有没有办法构建独立于Cygwin(运行时环境)的JSON-C?

: 我已经知道,如果使用Cygwin希望为Windows创建这样一个独立的DLL,那么可以使用编译器的几个参数和一些额外的宏放在函数声明的前面,如这里所述。在GCC或Cygwin中创建DLL? 但是我在Windows的JSON-C源码中没有看到这样的支持,所以我想知道JSON-C开发团队是否通过构建系统保留了一些规定。所以我只是想知道JSON-C开发团队是否通过构建系统保留了一些规定,那么我很想知道这部分内容。

PS: 由于我的其他开发,我还没有涉足JSON-C构建系统,所以如果有谁(我亲爱的社区)有这方面的东西,那么请分享,这将是非常好的。

编辑 忘了说我用的是什么版本了 :pjson-c-0.13.1-20180305。

windows build-system json-c
1个回答
0
投票

我能够建立JSON-C 0.14-20200419(从 https:/github.comjson-cjson-c)在MSYS2下使用MinGW-w64--静态和共享--使用这些指令(替换掉 /usr/local 根据需要)。)

INSTALLPREFIX=/usr/local
mkdir -p build_static build_shared &&
 ~/buildstatus.sh configure &&
 cmake.exe -Wno-dev -GNinja -DCMAKE_INSTALL_PREFIX:PATH=$INSTALLPREFIX -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_TESTING:BOOL=OFF -S. -Bbuild_static &&
 ~/buildstatus.sh configure &&
 cmake.exe -Wno-dev -GNinja -DCMAKE_INSTALL_PREFIX:PATH=$INSTALLPREFIX -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=ON -DBUILD_TESTING:BOOL=OFF -S. -Bbuild_shared &&
 ~/buildstatus.sh build-install &&
 ninja -Cbuild_static install/strip &&
 ~/buildstatus.sh build-install &&
 ninja -Cbuild_shared install/strip &&
 echo Success

如果你没有ninja,你可能也可以用 -G"MSYS Makefiles" 并使用 make 而不是 ninja.

请注意,MinGW-w64与Cygwin的不同之处在于它可以编译成本地的Windows二进制文件,而不需要依赖兼容层(像Cygwin的cygwin1.dll)。下面的截图说明了这一点。enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.