cmath库导致C ++中的运行时错误

时间:2015-08-14 14:35:26

标签: c++ debugging segmentation-fault cmath

免责声明:我不是专家或专业人士,而只是在教自己。因此,我解决这个问题的尝试最多可能是最基本的。

在C ++中,每当我尝试使用<cmath>库编译程序时,编译将完成,但是当程序尝试执行时,我会收到运行时错误。弹出一个Windows对话框,说该程序已停止工作并正在搜索解决方案。我想我会先尝试学习一下,然后先给出我最好的镜头。所以我加载了GDB并尝试运行该程序,以便更多地了解正在发生的事情。

当运行包含<cmath>库的程序时,GDB会立即输出以下内容(无论我将断点放在何处):

warning: Could not load shared library symbols for C:\Program Files\DGAgent\plugins\09D849B6-32D3-4A40-85EE-6B84BA29E35B\AE_MailSensor_Plugin.dll.
Do you need "set solib-search-path" or "set sysroot"?
warning: Could not load shared library symbols for C:\Program Files\DGAgent\plugins\09D849B6-32D3-4A40-85EE-6B84BA29E35B\ame_outlooksensor.dll.
Do you need "set solib-search-path" or "set sysroot"?
warning: Could not load shared library symbols for C:\Program Files\DGAgent\plugins\09D849B6-32D3-4A40-85EE-6B84BA29E35B\ame_smtpsensor.dll.
Do you need "set solib-search-path" or "set sysroot"?
warning: Could not load shared library symbols for C:\Program Files\DGAgent\plugins\09D849B6-32D3-4A40-85EE-6B84BA29E35B\OS_Plugin.dll.
Do you need "set solib-search-path" or "set sysroot"?
warning: Could not load shared library symbols for C:\Program Files\DGAgent\plugins\09D849B6-32D3-4A40-85EE-6B84BA29E35B\COM_sensor.dll.
Do you need "set solib-search-path" or "set sysroot"?

如果我将断点放在main上,它就会停在这里。如果我允许它在没有断点的情况下运行或指示GDB移动到下一步我收到:

Program received signal SIGSEGV, Segmentation fault.
0x6fc85cd1 in libstdc++-6!_ZNSo9_M_insertIdEERSot_ ()
    from C:\Users\Me\Desktop\libstdc++-6.dll

从我可以收集的内容来看,由于某些原因,我的系统在加载<cmath>库时出现问题,但我仍然不确定原因。前三个警告看起来像是与电子邮件进程相关的文件,但这对我来说没什么意义(但我再也不太了解)。这就是我被困的地方。

仅供参考:我正在运行Windows 7企业版,我的编译器使用MinGW和G ++。

编辑:我尝试使用-g启用调试符号来编译程序。执行此操作时,回溯仅减少到#0,#1和#2(请参阅下面的注释以了解原始回溯),其中#2附加在`C:\ Users \ me \ desktop \ file.cpp:19。指示行这是该方法之前的最后一步。在更简单的程序中重复这种情况,指示的行是调用方法之前的最后一步。

是否可能存在类似于forum thread的版本问题指向此{{3}}?我使用gcc版本4.8.1

编辑:根据@ pm100的要求。 代码:

#include <cmath>
#include <iostream>
using namespace std;

int main() {
  cout << floor(2.3);
}

用于编译:(我使用记事本++)

NPP_SAVE
CD $(CURRENT_DIRECTORY)
C:\mingw\bin\g++ "$(FULL_CURRENT_PATH)" -o "$(NAME_PART).exe" -g
cmd /c $(NAME_PART).exe

0 个答案:

没有答案