【问题标题】:cppcheck std.cfg not found error when std.cfg file is available当 std.cfg 文件可用时,cppcheck std.cfg not found 错误
【发布时间】:2014-04-24 13:25:30
【问题描述】:

如果我启动我的 cppcheck,我会收到以下错误: cppcheck ListLib.c (信息)未能加载 std.cfg。您的 Cppcheck 安装已损坏,请重新安装。 Cppcheck 二进制文件是在 CFGDIR 设置为“/usr/bin/cfg”的情况下编译的,因此将在该路径中搜索 std.cfg。

系统:opensuse13,cppcheck版本:cppcheck-1.64, 编译:make SRCDIR=build CFGDIR=/usr/bin/cfg HAVE_RULES=yes

检查文件是否存在: ls /usr/bin/cfg : gtk.cfg posix.cfg qt.cfg sdl.cfg std.cfg windows.cfg

哪里是cfg: cfg:/usr/bin/cfg

std.cfg: 标准:/usr/bin/cfg/std.cfg

cat std: /usr/bin/cfg/std.cfg 为我提供了该文件的输出

堆栈跟踪:

lstat("/home/.../ListLib.c", {st_mode=S_IFREG|0644, st_size=4568, ...}) = 0
stat("/home/.../ListLib.c", {st_mode=S_IFREG|0644, st_size=4568, ...}) = 0
open("std.cfg", O_RDONLY)               = -1 ENOENT (No such file or directory)
open("cfg/std.cfg", O_RDONLY)           = -1 ENOENT (No such file or directory)
write(2, "(information) Failed to load std"..., 213) = 213
write(2, "\n", 1)                       = 1
exit_group(1)                           = ?
+++ exited with 1 +++

更改到 /usr/bin 目录有效: 正在检查 /.../ListLib.c

cppcheck --check-config ListLib.c: 如果我在 /usr/bin/ 中执行此操作,则会给出相同的错误并且工作正常

Okey 对于登陆此页面的人,我可以使用我的主文件夹中的 cfg 文件:

使 SRCDIR=build CFGDIR=~/cppcheck_cfg 然后离场
须藤制作安装

【问题讨论】:

  • cppcheck --check-config 选项可能有一些有用的输出。
  • cppcheck --check-config ListLib.c: 给出相同的错误并且如果我在 /usr/bin/ 中执行它就可以正常工作
  • 这对我有用:cd /home/kubuntu/Projects/cppcheck && make SRCDIR=build CFGDIR=/home/kubuntu/Projects/cppcheck/cfg/std.cfg -j3 && sudo make install -j3 看来 CFGDIR 实际上必须是文件而不是目录!
  • CFGDIR 必须是一个目录,注意它如何声明 CFDIR 而不是 CFG 文件,来自手册:cppcheck 需要 .cfg 文件。要么将它们放在二进制文件所在的子文件夹 cfg 中。否则,使用 CFGDIR 编译 cppcheck 以指定放置 .cfg 文件的任意路径。我什至有多个 cgf 文件看不到这个工作正常,似乎不好的做法
  • cppcheck README 给出了首选的 make 行:github.com/danmar/cppcheck

标签: cppcheck


【解决方案1】:

正如@prabhugs 所说,我会做更多的描述。 在github的源码中,cppcheck,建议make语法为:

$ make SRCDIR=build CFGDIR=cfg HAVE_RULES=yes CXXFLAGS="-O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function

“CFGDIR”选项是您可以指定的方向。例如:

$ make SRCDIR=build CFGDIR=/usr/share/cppcheck HAVE_RULES=yes CXXFLAGS="-O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function

然后,你可以使用这个语法:

$ sudo make install CFGDIR=/usr/share/cppcheck/

相信您在完成这些步骤后就可以享受 cppcheck。

【讨论】:

    【解决方案2】:

    在使用 Qt Creator 在 Mac 上编译并运行 GUI 版本后,我在目录上运行 cppCheck GUI 时遇到了同样的问题。我通过将“std.cfg”复制到应用程序文件夹中解决了这个问题:Contents/MacOS 您必须右键单击 cppcheck-gui 应用程序才能访问内容。将它放在 cppcheck-gui 文件旁边似乎可以,因为它必须是它首先检查的文件夹。 “std.cfg”文件可以在 cfg 文件夹中找到。

    【讨论】:

      【解决方案3】:

      我也遇到了同样的问题。

      解决方案:

      $ make SRCDIR=build CFGDIR=/usr/share/cppcheck/
      
      $ sudo make install CFGDIR=/usr/share/cppcheck/
      

      从 cppcheck 社区成员那里得到建议,并了解到“make install”也需要通过 CFGDIR 选项。

      【讨论】:

      • 我挖了Makefile找到了原因:make install也在lib目录中构建了代码,只是调用make无法编译。
      【解决方案4】:
      make SRCDIR=build CFGDIR=/usr/bin/cfg HAVE_RULES=yes
      
      make install CFGDIR=/usr/bin/cfg
      

      【讨论】:

      • 我认为,如果您逐步解释它的作用,这将对问题和未来的用户有益。
      • 这里唯一不同的是HAVE_RULES=yes,我刚刚看到手册现在推荐了have_rules=yes。只是“make install”在这里也可以,重复 CFGDIR=/usr/bin/cfg 没有意义。
      【解决方案5】:

      几天前我遇到了同样的问题,通过改变我在 cppcheck 上运行 makefile 的方式解决了。

      我使用 Linux Red Hat 版本,cppcheck 版本是 1.65。

      make SRCDIR=build CFGDIR=/home/###/####/cppcheck-1.65/cfg/ && make install
      

      我并没有真正深入细节,但 cppcheck 的 makefile 看起来他们正在清理 obj 并通过第一个 make 命令构建 cppcheck,包括 cfg 位置

      make SRCDIR=build CFGDIR=/home/###/####/cppcheck-1.65/cfg/ &&
      

      第二个 make 命令会将 cppcheck 分发到 /usr/bin/ 位置。

      make install
      

      现在您所要做的就是设置 bash。

      【讨论】:

      • 查看@prabhugs 的回答:make install 命令还需要设置CFGDIR
      【解决方案6】:

      使用file /usr/bin/cfg/std.cfg 检查权限,以确保您有权访问您认为应该尝试读取的配置文件。

      然后,如果失败,请在 strace 下运行 cppcheck 以查找失败的系统调用:strace -o /tmp/strace.out cppcheck ListLib.c

      【讨论】:

      • 权限为 777,我尝试了堆栈跟踪并得到以下错误: open("std.cfg", O_RDONLY) = -1 ENOENT (没有这样的文件或目录) open("cfg/std.cfg ", O_RDONLY) = -1 ENOENT (没有这样的文件或目录) write(2, "(信息) 加载 std 失败"..., 213) = 213 write(2, "\n", 1) = 1 exit_group (1) = ?如果我做 whereis std.cfg 我得到 std: /usr/bin/cfg/std.cfg
      • strace 输出表明它只检查当前目录和“.cfg”文件的“cfg”子目录。在运行 cppcheck 之前尝试 cding 到 /usr/bin 以查看是否满足它。 (我的 cppcheck (1.60.1) 版本没有 CFGDIR 构建时配置选项)
      • 这表明 CFGDIR 设置未按预期工作。也许尝试在一个干净的目录中重建 cppcheck,以确保 CFGDIR 设置符合您的预期。然后运行那里构建的 cppcheck。
      • 感谢您的帮助,将解决方案发布给其他人
      猜你喜欢
      • 2014-03-29
      • 2013-02-20
      • 2014-03-01
      • 1970-01-01
      • 2019-05-12
      • 2014-08-27
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多