Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Linux上的预编译头警告(太短,不能是PCH文件)_C++_Linux_G++_Gnu_Precompiled Headers - Fatal编程技术网

C++ Linux上的预编译头警告(太短,不能是PCH文件)

C++ Linux上的预编译头警告(太短,不能是PCH文件),c++,linux,g++,gnu,precompiled-headers,C++,Linux,G++,Gnu,Precompiled Headers,我在我的项目中有一个标题名为Core.h,我将其用作预编译标题: $(CXX) $(CXX_CFLAGS) -x c++-header Core.h 这将创建一个名为Core.h.gch的文件 *#include“Core.h”是模块中每个源文件的第一个指令 在OSX上,它运行得很好——我的项目编译得很好&编译速度相当快 但是,在Linux上,我的100多个文件中有7个给出了以下警告: 警告:Core.h.gch:太短,不能作为PCH文件 与其他所有源文件一样,#include“Core.h”

我在我的项目中有一个标题名为Core.h,我将其用作预编译标题:

$(CXX) $(CXX_CFLAGS) -x c++-header Core.h
这将创建一个名为Core.h.gch的文件

*#include“Core.h”
是模块中每个源文件的第一个指令

在OSX上,它运行得很好——我的项目编译得很好&编译速度相当快

但是,在Linux上,我的100多个文件中有7个给出了以下警告:

警告:Core.h.gch:太短,不能作为PCH文件

与其他所有源文件一样,
#include“Core.h”
是这些文件的第一行

有人见过这个吗?可能的原因?为什么只有少数包含PCH的文件会发出警告

我在Linux上使用gcc版本4.1.2,在OSX上使用gcc版本4.2.1

谢谢

编辑:

以下是我构建库的基本方法:

.PHONY: all 
all: $(MY_PCH) MYLIB.so MYLIB.a

MYLIB.so: $(MY_PCH) $(MY_OBJECTS)
  $(CXX) $(MY_OBJECTS) $(CXX_LDFLAGS) -o $@

MYLIB.a: $(MY_PCH) $(MY_OBJECTS)
  $(AR) $(ARFLAGS) $@ $(MY_OBJECTS)

$(MY_PCH):
  $(CXX) $(CXX_CFLAGS) -x c++-header Core.h

你用的是平行牌吗?可能是g++试图读取.gch文件,而另一个实例正在写入该文件。

我生成了-j8,因此有8个线程。但是即使没有-j8,我仍然会收到警告。@zedxz:这是你的问题。makefile并不表示其他对象文件依赖于预编译头,因此它尝试与预编译头并行构建它们,并且您有一个竞争条件。使用make的依赖规则强制在需要它的编译单元之前生成预编译头。绝对正确。将PCH作为deptency添加到对象而不是库中可以修复争用条件。非常感谢你!