目前使用它来编译我的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引用。
答案 0 :(得分:2)
当您应该使用-lGLEW
时,您似乎正在使用-lglew32s/lglew32
标记!如果您是静态链接,请务必#define GLEW STATIC
,并从他们的网站获取相应的二进制文件。
如果加载程序(或任何程序)崩溃,请检查您是否使用的是最新版本。如果没有,请抓住最新版本并重试。如果它没有解决它,你能找到旧版本并使用它吗?如果您无法轻松找到有效的版本,则需要向相关团队报告错误 - 在MinGW或GNU的bin-utils团队。 32位编译是一个选项吗?如果是这样,试试吧。你在一个洞里;它可能需要一些挖掘来让自己离开。
这个问题似乎发生在2016年,尽管这个问题是从2014年开始的。这个问题尚未得到解决有点令人惊讶 - 假设2016年的有缺陷的自由运行与那个问题相同发生在2014年。如果现在使用的装载机可以追溯到(比如)2013年 - 2015年初,那么可能会有更新,您应该对其进行调查。如果现在使用的加载器可以追溯到2015年中期开始,那么它更有可能(或者,如果它过于激进,那么它至少是可能的)它是一个不同的错误,它表现得同样如此。
建议"如果有可用的话,尝试升级;如果这不起作用,看看你是否能找到降级工作"仍然有效。值得尝试创建MCVE(Minimal, Complete, and Verifiable Example)并向维护团队报告错误 - 2014年suggested nodakai也是如此。您使用的代码越小,并且您需要的库越少,维护团队就越容易发现问题并进行修复。如果它是在Linux上运行MinGW的交叉编译器,那么您仍然需要最小化代码并报告问题。
请注意,如果您能找到“已知工作”的话。版本,这可能是维护者感兴趣的。它定位了他们需要看的地方。
我应该注意,即使使用的库是错误的库,加载器仍然不应该因free
错误而崩溃。它可以报告问题并停止控制。它不应该崩溃。它可能仍然值得报告它确实崩溃。
在许多方面,这只是关于在遇到软件错误时该怎么做的通用建议。
答案 1 :(得分:0)
当你应该使用-lGLEW
时,你是(我曾经)使用-lglew32s/lglew32
标志!如果您是静态链接,请务必#define GLEW STATIC
...从他们的网站获取相应的二进制文件.-。