今天写了一个C++程序,按照以往的习惯编译,Windows报“XXX.exe已停止工作”,gdb单步执行的时候,在一条声明语句处出现了下面的信息:

Program received signal SIGSEGV, Segmentation fault.
0x6fc89edc in libstdc++-6!_ZNSsC1Ev ()
from d:\Program Files\gnuplot\bin\libstdc++-6.dll

原来是编译时链接的dll和运行时的dll不是同一个,这个地方应该是mingw下的c++库,结果却变成了gnuplot下的库了

解决办法:

(1)用静态链接,g++用选项-static-libgcc -static-libstdc++

(2)把gnuplot从环境变量path中去掉

http://stackoverflow.com/questions/11160179/no-source-available-for-libstdc-6-znso9-m-insertileersot-at-0x6fc868a8

Actually, Eclipse linked against C:\mingw\bin\libstdc++-6.dll but when executing, another one was used (i.e. C:\Program Files\gnuplot\bin\libstdc++-6.dll >_<) because gnuplot (that I installed a long time ago, nice piece of software by the way ;) ) added its installation directory to the PATH (even though C:\mingw\bin was in the PATH too) (it added some other environment variables as well)

http://stackoverflow.com/questions/6404636/libstdc-6-dll-not-found

If you are using MingW to compile C++ code on Windows, you may like to add the options -static-libgcc and -static-libstdc++ to link the C and C++ standard libraries statically and thus remove the need to carry around any separate copies of those. Version management of libraries is a pain in Windows, so I've found this approach the quickest and cleanest solution to creating Windows binaries.

--

顺便发现了一个小工具

http://dependencywalker.com/

相关文章:

  • 2021-11-16
  • 2018-12-06
  • 2021-08-23
  • 2022-03-02
  • 2021-10-06
  • 2022-12-23
  • 2021-05-25
  • 2022-12-23
猜你喜欢
  • 2021-12-19
  • 2022-02-11
  • 2022-12-23
  • 2022-01-16
  • 2021-09-21
  • 2021-10-07
相关资源
相似解决方案