Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >运行程序时报错“Value too large for defined data type”

运行程序时报错“Value too large for defined data type”

作者头像
一见
发布于 2020-02-13 08:35:36
发布于 2020-02-13 08:35:36
2.4K0
举报
文章被收录于专栏:蓝天蓝天

下列错误,可能是因为在64位上跑32位程序:

Value too large for defined data type

此错误对应的出错代码为EOVERFLOW,原因可能是目标文件超过2GB大小。

下列代码可能会导致这个错误出错(为何说是可能,本节最后部分解释):

// g++ -g -o x x.cpp -m32 #include #include #include #include #include #include #include   int main(int argc, char* argv[]) {   struct stat st;     if (stat(argv[1], &st) != 0)   {     printf("stat failed: %s.\n", strerror(errno));     return 1;   }   else {     printf("%zd\n", st.st_size);     return 0;   } }

改成下列后,运行正常:

// g++ -g -o x x.cpp -m32 #include #include #include #include #include #include #include   int main(int argc, char* argv[]) {   struct stat64 st;     if (stat64(argv[1], &st) != 0)   {     printf("stat failed: %s.\n", strerror(errno));     return 1;   }   else {     printf("%zd\n", st.st_size);     return 0;   } }

前面说的“可能”,是因为不同机器的编译环境(可理解为默认编译参数)可能并不相同,因此导致结果是可能,原因是宏“-D_FILE_OFFSET_BITS=64”会影响结果,如果定义了,则效果如同最后一段代码,否则报错“Value too large for defined data type”。相关宏:_LARGEFILE64_SOURCE__USE_FILE_OFFSET64,相关LIBC头文件:features.h

一些引用到的第三方库,可能定义了FILE_OFFSET_BITS,使用时需注意,比如:

# grep "FILE_OFFSET_BITS" /usr/include/*/*.h /usr/include/bits/environments.h:#define __ILP32_OFFBIG_CFLAGS  "-m32 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" /usr/include/mysql/my_config_x86_64.h:#define _FILE_OFFSET_BITS 64 /usr/include/python2.7/pyconfig-64.h:#define _FILE_OFFSET_BITS 64 /usr/include/python3.4m/pyconfig-64.h:#define _FILE_OFFSET_BITS 64

附1:查看GCC默认机器相关编译参数

gcc -march=native -c -Q --help=target

附2:查看GCC默认定义的宏

gcc -posix -E -dM -

或:

cpp -dM /dev/null

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/01/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
std::string的find问题研究
一次偶然,发现完全同一份代码,在不同机器上find出现两个不同执行结果,本文旨在研究find的“诡异”行为,找出背后的原因。
一见
2018/12/27
1.6K0
磁盘文件读性能测试
 Timing buffered disk reads: 2454 MB in  3.00 seconds = 817.84 MB/sec
一见
2018/08/10
1.6K0
centos7安装jdk,tomcat,nginx,redis,fastDFS的步骤
centos7安装jdk,tomcat,nginx,redis,fastDFS的步骤* 1.linux****安装****jdk** 1.1安装配置: cd /usr rz tar -zxvf jdk
挑战者
2018/06/13
1.5K0
强大的现代PHP高级调试工具 Kint
Kint是一个类似于var_dump()的PHP变量调试工具,但提供了更多高级功能,如键盘控制、搜索、访问路径提示和自动数据解析。支持JSON结构的展开和搜索,提供访问特定字段所需的代码片段。
Tinywan
2024/08/27
2160
强大的现代PHP高级调试工具 Kint
O_DIRECT方式读取文件示例
#include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/time.h> #include <unistd.h> #include <glog/logging.h> #include <gflags/gflags.h> /
一见
2018/08/10
7840
g++中宏NULL究竟是什么?
NULL是个指针,还是个整数?0?或(void*)0?答案是和g++版本有关。g++ 4.6支持C++11,引入了nullptr,也许会发生变化。
一见
2018/08/10
1.2K0
编译ffmpeg无法生成ffplay的问题解决
好多人问编译ffmpeg时无法生成ffplay,其具体原因多数是由于没有SDL或者SDL版本不正确所导致。
用户3765803
2019/03/05
2.6K0
UNIX 高级环境编程 第四章作业
针对此题,原有4.1.c中是lstat函数,运行时参数argc[1]是以创建的符号链接时,会返回该符号链接有关的信息,而不是符号链接引用的信息;如果是stat函数,运行时参数argc[1]是以创建的符号链接时,会返回符号链接引用的信息;
glm233
2020/10/26
7390
UNIX 高级环境编程 第四章作业
【最新最全】为 iOS 和 Android 的真机和模拟器编译 Luajit 库
编译 Luajit 库,的确是一个挑战。因为官网的教程,在当前版本的 Xcode 和 NDK 环境中,已经不适用了。以前只是编译了适用于真机的 Luajit 库。最近在尝试编译模拟器 Luajit 库,就顺便梳理了下 Luajit 库的编译经验,供以后查阅。网上的讨论也是有一些,但是相当一部分都已经过时。或许等你看到这篇文章的时候,可能也只是能获得一些可能的经验来解决自己的编译问题。所以说,了解一些基本的编译知识,能勉强看懂 Luajit 的 make 文件,还是很有必要的。本篇是关于 Luajit 静态库的,如果你想找的是如何编译适用于移动端的 Luajit 字节码,可以直接看 【最新】LuaJIT 32/64 位字节码,从编译到使用全纪录。
ios122
2018/07/31
2.7K0
2018腾讯内部调岗面试试题1——使用C/C++但不能用sizeof判断操作系统是32位还是64位
2018上半年折腾了一回,想换个后台开发岗尝试锻炼一下自己,面了三个部门,将有关有意思的题目汇总记录下来,供大家参考。
恋喵大鲤鱼
2018/08/03
1.8K0
检测Linux系统是否支持某系统调用
check_syscall.zip 随内核版本的变化,会增加一些新的系统调用,但如果glibc没有跟上,则不能直接调用,这个时候可以自己包装一下。如果想知道内核是否支持某系统调用,先得知道它的系统调用ID号,下面代码即是用来检查是否支持epoll_create1:
一见
2018/08/06
3.8K0
C/C++常见gcc编译链接错误解决方法
用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdynamic”指定链接共享库,使用示例: -Wl,-Bstatic -lmysqlclient_r -lssl -lcrypto -Wl,-Bdynamic -lrt -Wl,-Bdynamic -pthread -Wl,-Bstatic -lgtest ("-Wl"表示是传递给链接器ld的参数,而不是编译器gcc/g++的参数。) 1) 下面是因为没有指定链接参数-lz(/usr/lib/libz.so,/usr/lib/libz.a ) /usr/local/mysql/lib/mysql/libmysqlclient.a(my_compress.c.o): In function `my_uncompress': /home/software/mysql-5.5.24/mysys/my_compress.c:122: undefined reference to `uncompress' /usr/local/mysql/lib/mysql/libmysqlclient.a(my_compress.c.o): In function `my_compress_alloc': /home/software/mysql-5.5.24/mysys/my_compress.c:71: undefined reference to `compress' 2) 下面是因为没有指定编译链接参数-pthread(注意不仅仅是-lpthraed) /usr/local/mysql/lib/mysql/libmysqlclient.a(charset.c.o): In function `get_charset_name': /home/zhangsan/mysql-5.5.24/mysys/charset.c:533: undefined reference to `pthread_once' 3) 下面这个是因为没有指定链接参数-lrt /usr/local/thirdparty/curl/lib/libcurl.a(libcurl_la-timeval.o): In function `curlx_tvnow': timeval.c:(.text+0xe9): undefined reference to `clock_gettime' 4) 下面这个是因为没有指定链接参数-ldl /usr/local/thirdparty/openssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup': dso_dlfcn.c:(.text+0x4c): undefined reference to `dlopen' dso_dlfcn.c:(.text+0x62): undefined reference to `dlsym' dso_dlfcn.c:(.text+0x6c): undefined reference to `dlclose' 5) 下面这个是因为指定了链接参数-static,它的存在,要求链接的必须是静态库,而不能是共享库 ld: attempted static link of dynamic object 如果是以-L加-l方式指定,则目录下必须有.a文件存在,否则会报-l的库文件找不到:ld: cannot find -lACE 6) GCC编译遇到如下的错误,可能是因为在编译时没有指定-fPIC,记住:-fPIC即是编译参数,也是链接参数 relocation R_x86_64_32S against `vtable for CMyClass` can not be used when making a shared object 7) 下面的错误表示gcc编译时需要定义宏__STDC_FORMAT_MACROS,并且必须包含头文件inttypes.h test.cpp:35: error: expected `)' before 'PRIu64' 8) 下面是因为在x86机器(32位)上编译没有指定编译参数-march=pentium4 ../../src/common/libmooon.a(logger.o): In function `atomic_dec_and_test': ../../include/mooon/sys/atomic_gcc.h:103: undefined reference to `__sync_sub_and_fetch_4' 9) 下列错误可能是因为多了个“}” error: expected d
一见
2018/08/10
8.1K0
FastDFS图片服务器(分布式文件系统)学习。
参考:https://blog.csdn.net/hiqingtian/article/details/79413471
别先生
2019/08/13
2.3K0
FastDFS图片服务器(分布式文件系统)学习。
Linux进程间通信(四) - 共享内存
共享内存的优势 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件。共享内存中的内容往往是在解除映射时才写回文件的。因
三丰SanFeng
2018/01/16
7.4K0
Linux进程间通信(四) - 共享内存
g++入门教程
g++是GNU开发的C++编译器,是GCC(GNU Compiler Collection)GNU编译器套件的组成部分。另外,gcc是GNU的C编译器。
恋喵大鲤鱼
2019/02/22
15.2K1
纯C代码解析PE.获取资源表中的文件版本信息.
代码如下. 代码属于转载. 并未使用 windows的结构体. PIMAGE_DOS_HEADER ....等解析. 适用于内核驱动. windows内核下可以使用此代码来获取文件资源版本.
IBinary
2023/10/22
4060
纯C代码解析PE.获取资源表中的文件版本信息.
cygwin下编译报错 `addrinfo hints‘ has incomplete type and cannot be defined
显然从字面上看是没有找到addrinfo ,AI_PASSIVE等类型或符号的定义, 几经辗转在stackoverflow上找到下面这个讨论贴:
10km
2020/10/29
2K0
cygwin下编译报错 `addrinfo hints‘ has incomplete type and cannot be defined
sendfile函數的使用[通俗易懂]
sendfile函數linux內核新加的函數,可以使得網絡傳輸文件時用户层无需分配缓冲区给将要传输的文件,从而能够节约内存,并直接调用系统调用
全栈程序员站长
2022/09/05
5950
文件I/O (二).结构体存取(2)
在写代码的过程偶尔会用到一些宏,这些宏多定义在头文件中,通过查看头文件,就可以获取相关信息
franket
2021/09/16
6440
Win11之g++和build-essential的美妙甜甜圈
使用win11的ubuntu22.04子系统: ☞ Win11使用WSL2安装Ubuntu22.04并启用GUI应用 zhangrelay@LAPTOP-5REQ7K1L:~/cppcode$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04 DISTRIB_CODENAME=jammy DISTRIB_DESCRIPTION="Ubuntu 22.04 LTS" ---- 安装: sudo apt install build-
zhangrelay
2022/05/10
5360
Win11之g++和build-essential的美妙甜甜圈
相关推荐
std::string的find问题研究
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档