2015-11-17 25 views
7

Tôi đang cố gắng biên dịch chương trình C++ trên cửa sổ bằng GCC và một tệp makefile.lỗi: '_hypot' không được khai báo trong phạm vi này

Tôi nhận được lỗi sau

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)); } 

tôi đọc rằng bất kỳ tập tin có chứa trên GCC cần cờ mối liên kết -lm. Vì vậy, tôi đã thêm này để makefile của tôi, nhưng nó đã không khắc phục được vấn đề ...

Đây là makefile tôi

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 [email protected] $(LFLAGS) 

$(BUILD_DIR)/$(MAIN).o: $(SRC_DIR)/MyFirstVstMain.cpp 
    $(CC) $(CFLAGS) -c -o [email protected] $< $(LFLAGS) 

$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp $(SRC_DIR)/%.h 
    $(CC) $(CFLAGS) -c -o [email protected] $< $(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) 
+0

Rõ ràng một lỗi trong MinGW: http://ehc.ac/p/mingw/bugs/2250/ –

+0

Làm sao để tôi có được xung quanh này. Tôi đang sử dụng thư viện của bên thứ ba sử dụng math.h. Cụ thể là sdst steinberg vst. – ScottF

+0

vì vậy ... làm thế nào về một mẫu mã? Các makefile là không liên quan khác hơn để hiển thị các CFLAGS –

Trả lời

14

Đây là một lỗi trong MinGW, chưa tìm được cố định nhưng sử dụng - D__NO_INLINE__ hoặc chỉnh sửa math.h _hypot để hypot giải quyết vấn đề, không phải là sửa chữa đúng nhưng làm việc.

vấn đề khác có thể: Bạn có thể có nhiều phiên bản MinGW cài đặt, xác minh bạn đang sử dụng đúng một

+2

liên kết với [this] (http://stackoverflow.com/questions/29450016/o1-2-3-with-std-c1y-11-98-if-cmath-is -included-im-getting-error-hypo), vì nó chứa một câu trả lời từ một người đóng góp MinGW. Ông đề nghị chỉnh sửa math.h hoặc bao gồm tùy chọn '-std = gnu ++' ... để sử dụng thư viện C++ "mà không bị đàn áp các phần mở rộng của GNU," đặc biệt tránh sử dụng '__STRICT_ANSI__'. – foszter

Các vấn đề liên quan