C++ 土壤未解析外部符号

C++ 土壤未解析外部符号,c++,opengl,lnk2019,unresolved-external,soil,C++,Opengl,Lnk2019,Unresolved External,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:

好的,在任何人将这个问题标记为重复问题之前,我已经看了很多其他的在线帖子。我已经尝试了所有解决方案,但仍然无法修复这些错误:

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
我正在Windows 8上使用Visual Studio 2012。我已尝试重建库,并对我的所有Include和目录进行了五次检查。以下是我的SOIL includes/目录:

>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;
}
#包括
#包括
#包括“glext.h”
#包括
void-2d(void);
void display();
void glDisable2D(void);
胶合特克斯;
/*主要功能:GLUT作为控制台应用程序从Main()开始运行*/
int main(int argc,字符**argv)
{
glutInit(&argc,argv);//初始化GLUT
glutCreateWindow(“OpenGL设置测试”);//创建具有给定标题的窗口
GLUTINITWindowsSize(320320);//设置窗口的初始宽度和高度
glutInitWindowPosition(50,50);//定位窗口的初始左上角
//质地
glGenTextures(1和tex);
glBindTexture(GL_TEXTURE_2D,tex);
glTexParameteri(GL_纹理_2D、GL_纹理_包裹、GL_夹紧_至_边框);
glTexParameteri(GL_纹理_2D、GL_纹理_包裹、GL_夹紧至_边框);
浮动颜色[]={1.0f,0.0f,0.0f,1.0f};
glTexParameterfv(GL_纹理_2D,GL_纹理_边框_颜色,颜色);
glTexParameteri(GL_纹理2D、GL_纹理最小过滤器、GL_线性);
glTexParameteri(GL_纹理2D、GL_纹理MAG_过滤器、GL_线性);
int宽度、高度;
unsigned char*image=SOIL\u load\u image(“Resources/Sprites/playerCharacter.png”,&width和height,0,SOIL\u load\u RGB);
GLTEXAGE2D(GL_纹理_2D,0,GL_RGB,宽度,高度,0,GL_RGB,GL_无符号字节,图像);
无土壤图像数据(图像);
//质地
glutDisplayFunc(display);//注册窗口重新绘制的显示回调处理程序
glutMainLoop();//进入无限事件处理循环
返回0;
}

我一整天都在做这件事,但我没能弄清楚我做错了什么,这让我非常沮丧。注意:我知道SOIL.lib的原始名称是“libSOIL.a”。我尝试使用该名称使用它,但出现了相同的错误。

您可以自己在VS2012/13中构建VC8或VC9解决方案文件。如果要构建32位应用程序,请确保您是Win32配置。如果要构建64位应用程序,请将配置属性更改为x64。构建项目后,将openGL项目链接到这些生成的SOIL.lib文件,您就可以开始了。

我认为“我已尝试重建库”意味着您尝试使用visual studio重建
SOIL.lib
库?如果您在显示的错误消息中给出了对象文件的
.o
扩展名,那么您会有点惊讶(或者至少是链接器使用的.lib)。