我在Arch Linux上。我试过gcc和cc。
我有一个很奇怪的问题。我有一个文件包含在/ usr / include(从Arch包安装)中的C程序中。
// prog.c
#include <foobar/foobar.h>
当我改变它时,没有任何反应。让我解释。它包含一些C代码。
// foobar/foobar.h
int baz = 1, qux = 2;
最近,它已经更新。
// foobar/foobar.h
int baz = 1, qux = 2, norf = 3;
我的测试程序看起来如下所示。
// prog.c
#include <foobar/foobar.h>
printf ("%d %d %d\n", baz, qux, norf);
输出:
error: ‘norf’ undeclared (first use in this function)
我可以在同一目录中复制该文件,将其命名为foobar2.h,然后包含该文件,然后输出:
1 2 3
所以路径不正确。我可以链接到该文件夹,将其命名为foobar2,并包含foobar2 / foobar.h并输出:
1 2 3
所以文件不正确。
要确认它没有注册更改,我可以完全销毁foobar文件夹并尝试仅打印最初位于标题内的2个变量。这输出:
1 2
显然有些东西没有更新。当我尝试使用文件中现有项目的枚举,函数或新值更新文件时,会显示相同的行为,并将它们包含为文件中的唯一行。没有任何更改注册。使用gcc和cc显示相同的活动。这已经持续了几个月,现在还没有解决。
答案 0 :(得分:2)
当文件似乎没有更新时,最好检查系统上编译器搜索同名文件夹的库的其他位置。在这种情况下,它位于/ usr / local / include中,我编写了一个完全忘记的版本。
答案 1 :(得分:0)
这可能主要是由于包含目录路径不匹配。查看可能影响C_INCLUDE_PATH
,CPATH
等行为的环境变量。另一种选择是在编译过程中与gcc -I/src/directory foobar.h
核对,以便更接近问题或在代码中使用#include "foobar.h"
。
如果您的系统中有多个程序副本,则可能会使用完全不同的文件进行编译和执行,这也可能导致更改无法反映。