【问题标题】:error: '_hypot' was not declared in this scope错误:未在此范围内声明“_hypot”
【发布时间】:2016-02-18 09:06:54
【问题描述】:

我正在尝试使用 GCC 和 makefile 在 Windows 上编译一个 c++ 程序。

我收到以下错误

c:\mingw\include\math.h: In function 'float hypotf(float, float)':
c:\mingw\include\math.h:635:30: error: '_hypot' was not declared in this scope
 { return (float)(_hypot (x, y)); }

我读到任何包含在 GCC 上的文件都需要 -lm 链接器标志。所以我把它添加到我的makefile中,但它并没有解决问题......

这是我的生成文件

CC := g++
CFLAGS := -std=c++0x -g -O2 -static-libgcc -static-libstdc++
LFLAGS := -lm
BIN_DIR := bin
BUILD_DIR := build
SRC_DIR := src
MAIN := MyFirstVstMain
TARGET := MyFirstVstMake
SOURCES := $(wildcard src/*.cpp)
OBJECTS := $(SOURCES:$(SRC_DIR)/%.cpp=$(BUILD_DIR)/%.o)

$(BIN_DIR)/$(TARGET): CREATE_DIRS $(BUILD_DIR)/$(MAIN).o $(OBJECTS) 
    $(CC) $(OBJECTS) $(CFLAGS) -o $@ $(LFLAGS)

$(BUILD_DIR)/$(MAIN).o: $(SRC_DIR)/MyFirstVstMain.cpp
    $(CC) $(CFLAGS) -c -o $@ $< $(LFLAGS)

$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp $(SRC_DIR)/%.h
    $(CC) $(CFLAGS) -c -o $@ $< $(LFLAGS)

CREATE_DIRS: 
    if not exist $(BIN_DIR) mkdir $(BIN_DIR)
    if not exist $(BUILD_DIR) mkdir $(BUILD_DIR)

CLEAN:
    if exist $(BUILD_DIR) rmdir /Q /S $(BUILD_DIR)

【问题讨论】:

  • 显然是 MinGW 中的一个错误:ehc.ac/p/mingw/bugs/2250
  • 我该如何解决这个问题。我正在使用使用 math.h 的第三方库。特别是 steinberg vst sdk。
  • 那么......代码示例怎么样?除了显示 CFLAGS 之外,makefile 无关紧要

标签: c++ windows gcc g++ mingw


【解决方案1】:

这是 MinGW 中的一个错误,尚未找到修复,但使用 -D__NO_INLINE__ 或编辑 math.h _hypot 来假设解决了该问题,不是正确的修复,但有效。

其他可能的问题:您可能安装了多个 MinGW 版本,请确认您使用的是正确的版本

【讨论】:

  • 链接到this,因为它包含来自 MinGW 贡献者的答案。他建议编辑 math.h 或包含选项 -std=gnu++... 以“不抑制 GNU 扩展”来使用 c++ 库,特别是避免使用 __STRICT_ANSI__
猜你喜欢
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 2015-06-23
  • 2010-10-02
相关资源
最近更新 更多