2016-05-19 6 views
0

(Привет, это мой первый пост, и я использую Dev C++ IDE 5.11)
Включил заголовок SOIL.h и компоновщик: -lSOIL.
Эта программа компилируется без проблем и работает корректно, но когда я добавлю любую функцию в свой код из библиотеки SOIL, я получаю ошибку компоновщика.
«рецепт цели„Project1.exe“не удалось»
Вот код из почвы, что приводит к ошибке компоновщика:
Проблема с ошибкой компоновщика библиотеки SOIL с использованием C++

unsigned char* image = SOIL_load_image("container.jpg", &width, &height, 0, SOIL_LOAD_RGB); 

(Там, вероятно, легко объяснить и ответить на это, но Я искал везде, как я не могу найти его)
. Примечание: Я следую учебник с сайта learnopengl
Вот мой makefile.win:

# Project: Project1 
# Makefile created by Dev-C++ 5.11 
CPP  = g++.exe 
CC  = gcc.exe 
WINDRES = windres.exe 
OBJ  = Untitled2.o 
LINKOBJ = Untitled2.o 
LIBS  = -L"D:/Dev-Cpp/MinGW32/lib" -L"D:/Dev-Cpp/MinGW32/mingw32/lib" -static-libstdc++ -static-libgcc -lglut32 -lglu32 -lopengl32 -lwinmm -lgdi32 -lopengl32 -lopengl32 -lmingw32 -lSOIL 
INCS  = -I"D:/Dev-Cpp/MinGW32/include" -I"D:/Dev-Cpp/MinGW32/lib/gcc/mingw32/4.7.2/include" 
CXXINCS = -I"D:/Dev-Cpp/MinGW32/include" -I"D:/Dev-Cpp/MinGW32/lib/gcc/mingw32/4.7.2/include" -I"D:/Dev-Cpp/MinGW32/lib/gcc/mingw32/4.7.2/include/c++" 
BIN  = Project1.exe 
CXXFLAGS = $(CXXINCS) 
CFLAGS = $(INCS) 
RM  = rm.exe -f 
.PHONY: all all-before all-after clean clean-custom 
all: all-before $(BIN) all-after 
clean: clean-custom 
    ${RM} $(OBJ) $(BIN) 
$(BIN): $(OBJ) 
    $(CPP) $(LINKOBJ) -o $(BIN) $(LIBS) 
Untitled2.o: Untitled2.cpp 
    $(CPP) -c Untitled2.cpp -o Untitled2.o $(CXXFLAGS) 
01 Журнал

Компиляция:

Compiling project changes... 
-------- 
- Project Filename: D:\Desktop Files\Programming Stuff\C++\C++ Projects\project examples\etchasketch\Project1.dev 
- Compiler Name: MinGW GCC 4.7.2 32-bit Release 

Building makefile... 
-------- 
- Filename: D:\Desktop Files\Programming Stuff\C++\C++ Projects\project examples\etchasketch\Makefile.win 

Processing makefile... 
-------- 
- Makefile Processor: D:\Dev-Cpp\MinGW32\bin\mingw32-make.exe 
- Command: mingw32-make.exe -f "D:\Desktop Files\Programming Stuff\C++\C++ Projects\project examples\etchasketch\Makefile.win" all 

g++.exe Untitled2.o -o Project1.exe -L"D:/Dev-Cpp/MinGW32/lib" -L"D:/Dev-Cpp/MinGW32/mingw32/lib" -static-libstdc++ -static-libgcc -lglut32 -lglu32 -lopengl32 -lwinmm -lgdi32 -lopengl32 -lmingw32 -Bstatic -lSOIL 

D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0x3e): undefined reference to `[email protected]' 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0x72): undefined reference to `[email protected]' 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0xbe): undefined reference to `[email protected]' 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0xf2): undefined reference to `[email protected]' 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0x115): undefined reference to `[email protected]' 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0x15e): more undefined references to `[email protected]' follow 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0x1d1): undefined reference to `[email protected]' 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0x5e2): undefined reference to `[email protected]' 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0x66a): undefined reference to `[email protected]' 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0x84f): undefined reference to `[email protected]' 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0xdf8): undefined reference to `[email protected]' 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0x100d): undefined reference to `[email protected]' 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0x1427): undefined reference to `[email protected]' 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0x15a8): undefined reference to `[email protected]' 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0x161a): undefined reference to `[email protected]' 
D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o):SOIL.c:(.text+0x188c): undefined reference to `[email protected]' 
d:/dev-cpp/mingw32/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: D:/Dev-Cpp/MinGW32/lib/libSOIL.a(SOIL.o): bad reloc address 0x0 in section `.data' 
d:/dev-cpp/mingw32/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation 
collect2.exe: error: ld returned 1 exit status 

D:\Desktop Files\Programming Stuff\C++\C++ Projects\project examples\etchasketch\Makefile.win:25: recipe for target 'Project1.exe' failed 
mingw32-make.exe: *** [Project1.exe] Error 1 


Compilation results... 
-------- 
- Errors: 1 
- Warnings: 0 
- Compilation Time: 0.25s 
+0

'Рецепт для цели' Project1.exe 'failed' не очень информативен, не могли бы вы опубликовать более раннюю ошибку? Кроме того, проверьте, что libSOIL находится в одном из каталогов/lib в строке LIBS =. – patstew

+0

Единственная другая ошибка, которую я получаю: id возвратил 1 статус выхода. И, к сожалению, более ранних ошибок нет. Это libsoil.a, который должен быть в каталоге/lib? Это то, что сейчас есть. – newbcoder

+0

Попробуйте '-loseil' вместо' -lSOIL'. Также .a - статическая библиотека, попробуйте добавить '-Wl, -Bstatic' перед' -lsoil'. – patstew

ответ

0

Спасибо так много Патрик Стюарт помог мне понять это.
Как ни странно, когда у меня не было -Bstatic, была единственная ошибка. Когда я последовал тому, что вы сказали о журнале компиляции, он дал больше ошибок, которые я не знал. Я разобрал его и узнал ответ с этого сайта:
http://www.gamedev.net/topic/614336-soil-linker-errors/
что -lSOIL должен был быть до -lopengl32. Это, по-моему, странно, но это решение.