我正在制作一个应该在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。我只是想在开始开发之前确保一切正常。我试过搜索但没有用。
任何帮助都将不胜感激。
答案 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
找到了相关信息
答案 1 :(得分:2)
我有类似的问题。我在CIFS挂载的samba共享中编译了一个项目。使用一个Linux内核编译完成,但使用其他Linux内核(2.6.32.5),我得到类似的错误消息:“对于定义的数据类型,值太大”。当我使用提出的“nounix,noserverino”CIFS安装选项时,问题得到了解决。因此,在这种情况下,CIFS安装存在问题,因此错误消息具有误导性,因为没有大文件。
答案 2 :(得分:1)
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表示只编译)