0

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

因此JSON-C是使用 C 编程处理JSON的非常流行的库之一。当前工作的基本说明,此处构建的任何代码都是针对多平台的。目前支持 Linux 和 Windows 的平台,我对 Windows 相关的 JSON-C 部分有一些小问题。

我正在使用 Cygwin 进行 Windows 开发,当我按照其 GitHub 页面上提供的说明编译 JSON-C 代码时,使用 CMAKE 效果非常好,并且构建系统能够为 Windows 生成 DLL。但是,如果您使用过 Cygwin,那么您必须知道使用 Cygwin 构建的任何内容都将依赖于它的运行时环境(cygwin1.dll)(为什么 GCC-Windows 依赖于 cygwin?),它不会是独立的 DLL,可以移动到具有相同架构的不同系统。因此,如果我的项目是在 Windows 平台上构建的,那么由于对 Cygwin 的依赖,我必须随身携带 Cygwin Run-Time Env。或者我必须确保在目标系统上安装了 Cygwin 才能顺利执行。我不希望我的项目有这种依赖,它会破坏用户体验。

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

注意:我已经知道,如果使用 Cygwin 的人希望为 Windows 创建这样一个独立的 DLL,那么可以使用编译器的少量参数和一些位于函数声明前面的附加宏来完成,如此处所述在 GCC 中创建 DLL 或赛格温?
但我在 Windows 的源代码 JSON-C 中看不到这种支持。所以我只是想知道 JSON-C 开发团队是否通过构建系统保留了一些规定,那么我很想知道那部分。

PS:由于我的其他开发,我还没有涉足 JSON-C 构建系统,所以如果那里的任何人(我心爱的社区)对此有任何了解,请分享,那将是非常棒的。

编辑
忘了提及我正在使用的版本:p json-c-0.13.1-20180305

4

1 回答 1

0

我可以在 MSYS2 下使用 MinGW-w64 构建 JSON-C 0.14-20200419(来自https://github.com/json-c/json-c) - 静态和共享 - 使用这些说明(/usr/local根据需要替换):

INSTALLPREFIX=/usr/local
mkdir -p build_static build_shared &&
 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 &&
 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 &&
 ninja -Cbuild_static install/strip &&
 ninja -Cbuild_shared install/strip &&
 echo Success

如果您没有忍者,您可能还可以使用-G"MSYS Makefiles"和使用make而不是ninja.

请注意,MinGW-w64 与 Cygwin 的不同之处在于它编译为本机 Windows 二进制文件,而不依赖于兼容层(如 Cygwin 的 cygwin1.dll)。以下屏幕截图说明了这一点: 在此处输入图像描述

于 2020-06-05T09:58:07.500 回答