2015-11-17 14 views
7

GCC ve makefile kullanarak Windows üzerinde bir C++ programı derlemeye çalışıyorum.hata: '_hypot' bu kapsamda bildirilmedi

aşağıdaki hatayı

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

alıyorum ben GCC üzerinde içeren herhangi bir dosya lm bağlayıcı işareti ihtiyacı olduğunu okudum. Yani

İşte bu, sabit fakat kullanarak MinGW bir hata bulamadık benim 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 [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

Görünüşe MinGW bir hata: http://ehc.ac/p/mingw/bugs/2250/ –

+0

Bunu nasıl halledebilirim. Math.h kullanan bir üçüncü taraf kitaplığı kullanıyorum. Özellikle steinberg vst sdk. – ScottF

+0

Yani bir kod örneği nasıl olur? Makefile, CFLAGS –

cevap

14

olduğunu ... benim makefile için bu eklemiş, ancak sorunun düzeltilmesi vermedi - D__NO_INLINE__ veya düzenlemek için math.h _hypot hipotripte sorunu çözdü, doğru düzeltmeyi değil çalıştı.

Diğer olası sorunu: Sen hakkını kullandığınız doğrulamak, çoklu MinGW versiyonları yüklü olabilir tek

+2

'u [this] ile ilişkilendirmekten başka bir şey değildir (http://stackoverflow.com/questions/29450016/o1-2-3-with-std-c1y-11-98-if-cmath-is -mucize-im-getting-error-hypo), bir MinGW katkısından bir cevap içerdiğinden. Özellikle, "__STRICT_ANSI__" kullanımından kaçınarak, C++ kütüphanesinin "GNU uzantılarının baskısı olmadan" kullanılması için math.h düzenlemesini ya da '-std = gnu ++' seçeneğini dahil etmeyi önerir. – foszter

İlgili konular