linux - free() : invalid pointer; ld terminated with signal 6 [Aborted], 核心已转储

标签 linux gcc compiler-errors mingw glew

错误

当前使用它来编译我的 C++ 程序:

x86_64-w64-mingw32-g++ -std=c++11 -c main.cpp -o main.o -I../include

x86_64-w64-mingw32-g++ main.o -o mainWin.exe -L/usr/lib/x86_64-linux-gnu/ -L/usr/local/lib -lopengl32 -lglfw32 -lGLEW -lX11 -lXxf86vm -lXrandr -lpthread -lXi -DGLEW_STATIC

我正在使用 Mingw 将我的 C++ 程序从 Linux (Ubuntu) 编译为 Windows 可执行文件。我对通过命令行进行编译还比较陌生,但我想将我的工作环境完全切换到 Linux。

当我尝试编译该程序时,出现以下错误:

*** Error in `/usr/bin/x86_64-w64-mingw32-ld`: free(): invalid pointer: [removed]***
ld terminated with signal 6 [Aborted], core dumped

我相信这是因为我构建的 GLEW。每当我make它时,它都想使用mingw的mingw32msvc版本。我想我需要它来使用 x86_64-w64-mingw32-gcc。我不知道如何让它做到这一点(如果可能的话)。

额外

还值得注意的是,我仅在 main.cpp 顶部定义的 GLEW_STATIC 时遇到此错误。如果没有它,我就会得到对 GLEW 的 undefined reference 。

最佳答案

当您应该使用-lglew32s/lglew32时,您似乎使用了-lGLEW标志!如果您是静态链接,请确保#define GLEW STATIC...并从其网站获取适当的二进制文件。


如果加载程序(或任何程序)崩溃,请检查您是否使用的是最新版本。如果没有,请获取最新版本并重试。如果这不能解决问题,您可以找到旧版本并使用它吗?如果您无法轻松找到有效的版本,则需要向 MinGW 的相关团队或 GNU 的 bin-utils 团队报告该错误。 32 位编译是一种选择吗?如果是这样,请尝试一下。你在一个洞里;可能需要一些挖掘才能让自己摆脱困境。

这个问题似乎是在 2016 年出现的,尽管这个问题是从 2014 年开始的。令人有点惊讶的是,这个问题还没有得到解决——假设 2016 年遇到的有缺陷的免费软件与 2016 年遇到的有缺陷的免费软件是一样的。发生在 2014 年。如果现在使用的加载程序可以追溯到 2013 年至 2015 年初,那么可能有更新,您应该对其进行调查。如果现在使用的加载程序是从 2015 年中期开始的,则更有可能(或者,如果这太激进,那么至少有可能)它是一个表现相似的不同错误。

“如果有可用的升级,请尝试升级;如果不起作用,看看是否可以找到有效的降级”的建议仍然有效。值得尝试创建一个 MCVE ( Minimal, Complete, and Verifiable Example ) 并向维护团队报告错误 - 就像 suggested 一样。通过 nodakai 2014 年。您使用的代码越小,需要的库越少,维护团队就越容易发现问题并修复它。如果是在Linux上运行MinGW的交叉编译器,那么您仍然需要最小化代码并报告问题。

请注意,如果您可以找到“已知可用”版本,维护人员可能会对此感兴趣。它可以定位他们需要查看的地方。

我应该注意,即使正在使用的库是错误的库,加载器仍然不应该因 free 错误而崩溃。它可以报告问题并在控制下停止。它不应该崩溃。可能仍然值得报告它确实崩溃了。

在很多方面,这只是当您遇到软件错误时应采取的措施的一般建议。

关于linux - free() : invalid pointer; ld terminated with signal 6 [Aborted], 核心已转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25275414/

相关文章:

c - X11 标准文件选择器对话框

linux - Linux中模式匹配后提取内容

使用不同的堆栈指针调用 C 函数 (gcc)

c - 使用 GCC 的两个有符号 64 位乘法

c++ - 智能感知 : cannot open source file "curl.h" in C++

c++ - 错误: no match for 'operator<<' C++

php - 如何从 ubuntu 和 php 5.3.10 连接到 mssql

linux - 如何绕过 bash 中的 CRLF 标签?

c - 未定义对 `pow' 和 `floor' 的引用

java - "Cannot find symbol"或 "Cannot resolve symbol"错误是什么意思?