cc1plus:error:include:使用g ++编译时,对于定义的数据类型,值太大

时间:2010-03-13 15:34:59

标签: visual-studio g++

我正在制作一个应该在Windows和Linux上编译的项目。我在Visual Studio中创建了项目,然后为linux创建了一个makefile。我使用VS创建了Windows中的所有文件。

它在VS中编译并运行完美,但是当我运行makefile并运行g ++时,我得到了

$ g++ -c -I include -o obj/Linux_x86/Server.obj src/Server.cpp
cc1plus: error: include: Value too large for defined data type
cc1plus: error: src/Server.cpp: Value too large for defined data type

代码只不过是一个Hello World atm。我只是想在开始开发之前确保一切正常。我试过搜索但没有用。

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:35)

我至少在Ubuntu上找到了解决方案。我,就像你已经注意到错误只发生在已安装的samba共享上 - 它似乎来自g ++'stat'ing文件,inode返回一个非常大的值。

将share add,nounix,noserverino挂载到选项时,即:

mount -t cifs -o user=me,pass=secret,nounix,noserverino //server/share /mount

我在http://bbs.archlinux.org/viewtopic.php?id=85999

找到了相关信息

答案 1 :(得分:2)

我有类似的问题。我在CIFS挂载的samba共享中编译了一个项目。使用一个Linux内核编译完成,但使用其他Linux内核(2.6.32.5),我得到类似的错误消息:“对于定义的数据类型,值太大”。当我使用提出的“nounix,noserverino”CIFS安装选项时,问题得到了解决。因此,在这种情况下,CIFS安装存在问题,因此错误消息具有误导性,因为没有大文件。

答案 2 :(得分:1)

GNU Core Utils:

  

27对于定义的数据类型,值太大

     

这意味着您的实用程序版本未编译   启用大文件支持。 GNU实用程序确实支持大文件   如果他们被编译为这样做。您可能想再次编译它们   确保启用了大文件支持。这种支持是   在大多数系统上由autoconf自动配置。但它是   可能在您的特定系统上它无法确定如何   这样做,因此autoconf得出结论,你的系统没有   支持大文件。

     

消息“对于已定义的数据类型而言值太大”是系统错误   尝试使用大文件上的操作时报告的消息   非大型文件数据类型。大文件被定义为更大的文件   比签名的32位整数,或换句话说,大于2GB。

     

许多处理文件的系统调用在“long int”中返回值   数据类型。在32位硬件上,long int是32位,因此   对文件大小施加2GB限制。当这被发明时   是巨大的,很难想象需要任何大的东西。   时间已经过去,今天的文件可能会大得多。在本机64位   系统文件大小限制通常为2GB * 2GB。我们会再来一次   认为是巨大的。

     

在具有32位“long int”的32位系统上,您发现不能   使它更大,并保持与以前的兼容性   程式。改变这会打破很多东西!但是很多系统都有   可以切换到重写所有的新程序模式   将文件操作转换为64位程序模型。而不是“长”   他们使用一种名为“off_t”的新数据类型,它被构造成   64位大小。必须编写程序源代码才能使用off_t   数据类型而不是长数据类型。这通常是通过   定义-D_FILE_OFFSET_BITS = 64或某些此类。它取决于系统。   一旦完成并且一旦切换到这种新模式,大多数程序将会   支持大文件就好了。

     

如果您无意中创建了一个大文件,请参阅下一个问题   现在需要一些方法来处理它。

答案 3 :(得分:0)

如果您使用mergerfs文件系统,则删除use_ino选项可解决此问题:https://github.com/trapexit/mergerfs/issues/485

答案 4 :(得分:-1)

我认为你的g ++参数有点过时或有点冲突。

-c仅编译
-in include的目录(只是简单的包含可能不明确。尝试完整路径)
-o outfile(但-c表示只编译)