windows - 如何获得 pcre2 的完全静态构建

标签 windows cmake pcre

我正在尝试使用 cmake 在 Windows 10 上静态构建 pcre2。我采取的步骤是:

md C:\ProgramData\ThirdParty\installed\pcre2
md pcre2
curl https://ftp.pcre.org/pub/pcre/pcre2-10.35.tar.gz -o tmp.tar.gz
tar -xf tmp.tar.gz -C pcre2 --strip-components=1
cd pcre2
md build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX="C:\ProgramData\ThirdParty\installed\pcre2" -DBUILD_SHARED_LIBS=OFF -DPCRE2_STATIC=ON -DPCRE2_BUILD_TESTS=OFF -DZLIB_LIBRARY="C:\ProgramData\ThirdParty\installed\zlib\lib\zlibstatic.lib"
cmake --build . --config Release --target install

尽管这些设置应该在我理解正确的情况下构建一个静态库,但在尝试链接 pcre2-8.lib 时出现 Unresolved external symbol 错误,我还包含了 pcre2-posix.lib 以备不时之需。

使用 DUMPBIN/SYMBOLS 查看两个 lib 文件,我猜测有外部符号指向构建输出的 bin 目录中的 pcre2-8.dll。

是否可以让 pcre2-8.lib 没有外部引用?

提前感谢您的宝贵时间。

最佳答案

它已经是静态的了。只需在将要使用该库的项目中的 #include "pcre2.h"之前定义宏名称 PCRE2_STATIC。

像这样:

#define PCRE2_STATIC
#define PCRE2_CODE_UNIT_WIDTH 8

#include "pcre2.h"

关于windows - 如何获得 pcre2 的完全静态构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64895090/

相关文章:

c++ - 与 CMake 2.8 一起安装 CMake 3.3 的具体细节是什么?

c++ - CMake 中的 include_directory 继承?

windows - 批量删除文件名中特定字符前后的文本

c++ - 延长 Windows 服务停止的时间

Windows 10 安全存储

windows - 特定应用程序的文件权限

c++ - 使用Cmake输出库信息

regex - 为什么不能在断言后面的零宽度中使用重复量词?

php - 为什么 preg_match_all 会破坏此正则表达式?

regex - 区分 Haskell 中的空正则表达式匹配和无匹配