> 文章列表 > C导入正则库问题

C导入正则库问题

C导入正则库问题

环境

操作系统:win11 专业版
gcc: gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0
编辑器:vscode

要求

在c中使用正则表达式

遇到的问题以及解决思路

C标准中并没有正则表达式库

从其他地方下载正则表达式库即可。
http://gnuwin32.sourceforge.net/packages/regex.htm
(请仔细阅读页面信息 尤其是它的位数信息)

无法识别 regex 头文件

两种解决办法
一种直接把 下载的内容放到当前文件夹,然后使用相对路径include。
另外一种则是配置c_cpp_properties.json文件。

{"configurations": [{"name": "windows-gcc-x64","includePath": ["${workspaceFolder}/","F:/Compilers/regex/include"//添加了正则表达式库],"compilerPath": "D:/CodeBlocks/MinGW/bin/gcc.exe","cStandard": "${default}","cppStandard": "${default}","intelliSenseMode": "windows-gcc-x64","compilerArgs": [""]}],"version": 4
}

编译的时候报错undefined reference to `__imp_regcomp’

修改生成任务文件,添加lib所在目录文件和lib
别添加多了,只添加 regex.lib

{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C++: gcc.exe 生成活动文件","command": "D:/CodeBlocks/MinGW/bin/gcc.exe","args": ["-fdiagnostics-color=always","-g","${file}",//include头文件"-I","F:/Compilers/Regex/include/",//预编译好的lib和dll的位置 包不大就直接静态了"-L","F:/Compilers/Regex/bin/","-l","regex2","-o","${fileDirname}\\\\${fileBasenameNoExtension}.exe",""],"options": {"cwd": "D:/CodeBlocks/MinGW/bin"},"problemMatcher": ["$gcc"],"group": "build","detail": "编译器: D:/CodeBlocks/MinGW/bin/gcc.exe"}]
}

链接的时候报错ld.exe: cannot find -lregex.lib

找了半天天问题,一度怀疑是命令错误,因此查了一堆资料,但是还是没找到。。。。
所以我决定先能正常使用了再去看命令咋写。
所以我决定使用VS去进行库的导入。
稍微搜索一下,即可配置。(搜索关键词 VS C 导入 静态链接库 动态链接库)
可是当我配置完查看命令行的时候,才想起来,VS用的不是GCC,是MSVC

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!

所以那些命令其实根本没啥用。我要是在VSCODE中用微软的MSVC,还不如直接用VS搞。

于是我就又开始调试,看错误
终于我发现了

skipping incompatible F:/Compilers/Regex/bin//regex2.dll when searching for -lregex2

我看到这个skip 就感觉很奇怪,为啥跳了呢?
仔细一搜,发现这句话的意思是,因为regex2.dll的位数不匹配,所以自动忽略了它。
嗯?
于是我去查看了regex2.dll的位数
方法可参考这篇博文
https://blog.csdn.net/BigData_Mining/article/details/115444969
发现,我下的dll是32位,但是我的gcc是64位的
生成的程序默认64,所以就给我忽略了。
所以就没找到。

我仔细思考了一下,认为现在有4种解决办法

直接用VS写

最省事的一种,管他那么多,人生苦短,我用VS

换个语言

理由同上,我的目的是写一个词法分析器,用c只是觉得效率更高。。。

下载64位的dll

很难找,而且之后还会不会有问题我也不知道

下载别人的源码然后编译成lib 或者 dll

上面那个网站除了zip,还提供了源码,所以其实是可以下载下来然后自己做一个dll的。

修改目标程序位数为32位

这个我通过-m32试了试,还有一堆报错,没心查了

自己写一个正则

经典歌曲