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试了试,还有一堆报错,没心查了

自己写一个正则

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值