2015-05-09 6 views
2

Хорошо, прежде чем кто-либо отметит этот вопрос как дубликат, я просмотрел What is an undefined reference/unresolved external symbol error and how do I fix it? и многие другие онлайн-сообщения. Я перепробовал все решения я пришел, но я поперек сечения до сих пор не может исправить эти ошибки:SOIL нерешенные внешние символы

1>SOIL.lib(stb_image_aug.o) : error LNK2019: unresolved external symbol __alloca referenced in function _stbi_zlib_decode_noheader_buffer 
1>SOIL.lib(image_helper.o) : error LNK2019: unresolved external symbol _sqrtf referenced in function _RGBE_to_RGBdivA2 

Я использую Visual Studio 2012 на Windows 8. Я пытался восстанавливать библиотеку, и я пятикратно проверил все мои включенные и каталоги. Вот мои SOIL включает/каталог у меня:

>Configuration Properties->VC++ Directories->Include Directories: "C:\SOIL\Simple OpenGL Image Library\src 
>Configuration Properties->VC++ Directories->Library Directories: "C:\SOIL\Simple OpenGL Image Library\lib 
>Congiguration Properties->Linker->Input->Additional Dependencies: "SOIL.lib" 

И вот мой код. Функция SOIL_load_image является то, что вызывает ошибки:

#include <Windows.h> 
#include <GL/glut.h> 
#include "glext.h" 
#include <SOIL.h> 

void glEnable2D(void); 
void display(); 
void glDisable2D(void); 

GLuint tex; 

/* Main function: GLUT runs as a console application starting at main() */ 
int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv);     // Initialize GLUT 
    glutCreateWindow("OpenGL Setup Test"); // Create a window with the given title 
    glutInitWindowSize(320, 320); // Set the window's initial width & height 
    glutInitWindowPosition(50, 50); // Position the window's initial top-left corner 

    //Texture 
    glGenTextures(1, &tex); 
    glBindTexture(GL_TEXTURE_2D, tex); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); 
    float color[] = { 1.0f, 0.0f, 0.0f, 1.0f }; 
    glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, color); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

    int width, height; 
    unsigned char* image = SOIL_load_image("Resources/Sprites/playerCharacter.png", &width, &height, 0, SOIL_LOAD_RGB); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image); 
    SOIL_free_image_data(image); 
    //Texture 

    glutDisplayFunc(display); // Register display callback handler for window re-paint 
    glutMainLoop();   // Enter the infinitely event-processing loop 
    return 0; 
} 

Я работал над этим весь день, и я не мог понять, что я делаю неправильно, и это было очень сложно. Примечание. Я знаю, что исходное имя SOIL.lib - «libSOIL.a». Я пробовал работать с этим именем и получил те же ошибки.

+0

Я полагаю, что «я пытался перестроить библиотеку» означает, что вы попытались перестроить библиотеку 'soil.lib' с визуальной студией? Я был бы несколько удивлен, если бы вы это сделали (или, по крайней мере, это .lib, который использовался компоновщиком), учитывая расширение .o' для объектных файлов в сообщении об ошибке, которое вы указали. – SleuthEye

ответ

0

Вы можете самостоятельно создавать файлы решений VC8 или VC9 в VS2012/13. Просто убедитесь, что вы конфигурация Win32, если вы создаете 32-битное приложение. Измените свойства конфигурации на x64, если вы создаете 64-битное приложение. Как только проекты будут построены, свяжите ваш проект openGL с вашими созданными файлами SOIL.lib, и вам будет хорошо идти.