" relocation truncated to fit: R_X86_64_PC32 against symbol `__imp_Sleep' "问题
Problem with " relocation truncated to fit: R_X86_64_PC32 against symbol `__imp_Sleep' "
我写了一个非常简单的程序,它返回如下错误:
C:Program Files (x86)Dev-CppMinGW64x86_64-w64-mingw32libcrt2.o In function `__tmainCRTStartup':
254 C:crossdevsrcmingw-w64-v3-gitmingw-w64-crtcrtcrtexe.c (.text+0x1fe): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp_Sleep' defined in .idata$5 section in C:Program Files (x86)Dev-CppMinGW64x86_64-w64-mingw32lib/libkernel32.a(dgnms01196.o)
281 C:crossdevsrcmingw-w64-v3-gitmingw-w64-crtcrtcrtexe.c (.text+0x286): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp_SetUnhandledExceptionFilter' defined in .idata$5 section in C:Program Files (x86)Dev-CppMinGW64x86_64-w64-mingw32lib/libkernel32.a(dgnms01183.o)
289 C:crossdevsrcmingw-w64-v3-gitmingw-w64-crtcrtcrtexe.c (.text+0x2b4): relocation truncated to fit: R_X86_64_PC32 against symbol `__mingw_winmain_hInstance' defined in COMMON section in C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o
315 C:crossdevsrcmingw-w64-v3-gitmingw-w64-crtcrtcrtexe.c (.text+0x313): relocation truncated to fit: R_X86_64_PC32 against symbol `__mingw_winmain_lpCmdLine' defined in COMMON section in C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o
241 C:crossdevsrcmingw-w64-v3-gitmingw-w64-crtcrtcrtexe.c (.text+0x495): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp_GetStartupInfoA' defined in .idata$5 section in C:Program Files (x86)Dev-CppMinGW64x86_64-w64-mingw32lib/libkernel32.a(dgnms00627.o)
C:Program Files (x86)Dev-CppMinGW64libgccx86_64-w64-mingw324.9.2libstdc++.a(ios_init.o) ios_init.cc:(.text$_ZNSt8ios_base4InitC2Ev+0x3c): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp___iob_func' defined in .idata$5 section in C:Program Files (x86)Dev-CppMinGW64x86_64-w64-mingw32lib/libmsvcrt.a(dgrds00083.o)
C:Program Files (x86)Dev-CppMinGW64libgccx86_64-w64-mingw324.9.2libstdc++.a(ios_init.o) ios_init.cc:(.text$_ZNSt8ios_base15sync_with_stdioEb+0xc0): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp___iob_func' defined in .idata$5 section in C:Program Files (x86)Dev-CppMinGW64x86_64-w64-mingw32lib/libmsvcrt.a(dgrds00083.o)
C:Program Files (x86)Dev-CppMinGW64libgccx86_64-w64-mingw324.9.2libstdc++.a(basic_file.o) basic_file.cc:(.text$_ZN12_GLOBAL__N_1L6xwriteEiPKcx+0xd): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp__errno' defined in .idata$5 section in C:Program Files (x86)Dev-CppMinGW64x86_64-w64-mingw32lib/libmsvcrt.a(dgrds00203.o)
C:Program Files (x86)Dev-CppMinGW64libgccx86_64-w64-mingw324.9.2libstdc++.a(basic_file.o) basic_file.cc:(.text$_ZNSt12__basic_fileIcE8sys_openEP6_iobufSt13_Ios_Openmode+0x1b): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp__errno' defined in .idata$5 section in C:Program Files (x86)Dev-CppMinGW64x86_64-w64-mingw32lib/libmsvcrt.a(dgrds00203.o)
C:Program Files (x86)Dev-CppMinGW64libgccx86_64-w64-mingw324.9.2libstdc++.a(basic_file.o) basic_file.cc:(.text$_ZNSt12__basic_fileIcE5closeEv+0x33): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp__errno' defined in .idata$5 section in C:Program Files (x86)Dev-CppMinGW64x86_64-w64-mingw32lib/libmsvcrt.a(dgrds00203.o)
C:Program Files (x86)Dev-CppMinGW64libgccx86_64-w64-mingw324.9.2libstdc++.a(basic_file.o) basic_file.cc:(.text$_ZNSt12__basic_fileIcE6xsgetnEPcx+0xd): additional relocation overflows omitted from the output
C:UsersadminDesktopnaukainformatykaokicollect2.exe [Error] ld returned 1 exit status
这是代码:
#include <bits/stdc++.h>
using namespace std;
const int j = 1e9+7;
int numbers[j];
int main(){
int n;
cin >> n;
for (int i = 0; i<n; i++){
cin >> numbers[i];
}
return 0;
}
我知道错误在第三行(这个大数字是因为当我将 1e9 更改为 1e8 时没有错误(,但我不知道如何修复它。对不起我的英语,谢谢你的帮助!
gcc 通常在 x86-64 上使用"small"或"small pic"代码模型,它将代码加静态数据(即全局或static
(限制为 2 GB。 您的阵列接近 4 GB,因此您超过了这个数字。 您可以尝试-mcmodel=medium
或-mcmodel=large
,但它会降低性能(在large
的情况下,对于您的整个程序(,我不确定在 MinGW 上支持它是否存在问题。
对于如此大的数组,更好的解决方案是动态分配它,而不是根据需要使用malloc
或new
。 它避免了此问题,因为 2 GB 限制仅适用于静态数据。 其他好处包括:
-
如果可用内存不足,程序可以检测到错误并提供有用的消息或回退到其他操作模式。 对于静态数组,如果没有足够的内存,程序将根本无法启动,并且系统的错误消息可能无法提供信息。
-
如果在程序终止之前完成内存,则可以释放内存。
-
在这个程序中,你可以为
n
个整数分配足够的空间,如果n
小于你的常量j
,这将节省内存,如果n
更大,程序仍然可以工作(就目前而言,你会注销数组的末尾并导致未定义的行为, 可能是可利用的安全漏洞(。
相关文章:
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- CppSQLite 抛出"LNK2019: unresolved external symbol"错误
- 从不同目录执行时"symbol lookup error:",否则从构建目录执行时按预期工作
- Visual Studio中的wxwidgets应用程序给出错误"LNK2019 unresolved external symbol"
- 从 C 可执行文件加载动态库时收到错误C++"undefined symbol"
- " relocation truncated to fit: R_X86_64_PC32 against symbol `__imp_Sleep' "问题
- 在 C++ 中嵌入 V8 会导致与 libcpp 相关的"unrecognized external symbol"错误
- 为什么当我在 C 程序中链接静态库时会"undefined symbol"?
- OpenCV imwrite 函数导致'undefined symbol'
- cpp 在主源文件中包括.cpp文件导致错误"duplicate symbol"
- 在 Python 3.6 中调用C++扩展时导入错误"undefined symbol: _ZNK9FastNoise8GetNoiseEff"
- 我的游戏引擎的 spdlog 日志记录出现奇怪的"unresolved external symbol"错误
- 如何修复"unresolved external symbol _gladLoadGLLoader referenced in function _main"和"unresolved external
- 创建C++ Redis 模块 - "does not export RedisModule_OnLoad() symbol"
- 通过覆盖虚拟函数来获取'unresolved external symbol'
- PostgreSQL & CMakeLists - Undefined symbol [...] _my_sock_read in libpq.a(fe-secure-openssl.o)
- 如何解决问题"unresolved extenal symbol _DllMainCRTStartup@12"?
- 运行时动态加载库时出错"unresolved external symbol"
- "library has no symbol"是什么意思?