2013-03-21 2 views
-3

저는 비디오 게임을위한 OpenGL 프레임 워크를 현재 개발 중입니다. 이 프레임 워크에는 셰이더를로드하는 특정 프로그램이 들어 있습니다.또 다른 "해결되지 않은 외계 심벌"오류

InitShaderProgram(...); 
CreateShader(...); 
CreateProgram(...); 

InitShaderProgram 같은 방법으로 CreateShader 및 CreateProgram를 호출 그러나

bool ShaderLoader::InitShaderProgram(GLuint &Program) 
{ 
    std::vector<GLuint> ShaderList; 

    ShaderList.push_back(ShaderLoader::CreateShader(GL_VERTEX_SHADER, VertexShader)); 
    ShaderList.push_back(ShaderLoader::CreateShader(GL_FRAGMENT_SHADER, FragmentShader)); 

    Program = ShaderLoader::CreateProgram(ShaderList); 
    std::for_each(ShaderList.begin(), ShaderList.end(), glDeleteShader); 

    return GL_TRUE; 
} 

,이 코드를 컴파일하려고 할 때마다, 그것은 나에게 두 가지를 제공합니다 상기 프로그램의 클래스에서 나는이 세 가지 기능을 가지고 "확인되지 않은 외부 기호"오류 : 내 헤더 파일에서

Error 4 error LNK2019: unresolved external symbol "public: virtual unsigned int __thiscall ShaderLoader::CreateProgram(class std::vector<unsigned int,class std::allocator<unsigned int> > const &)" ([email protected]@@[email protected][email protected]@[email protected]@@[email protected]@@Z) referenced in function "public: bool __thiscall ShaderLoader::InitShaderProgram(unsigned int &)" ([email protected]@@[email protected]) 

Error 3 error LNK2019: unresolved external symbol "public: virtual unsigned int __thiscall ShaderLoader::CreateShader(unsigned int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" ([email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@Z) referenced in function "public: bool __thiscall ShaderLoader::InitShaderProgram(unsigned int &)" ([email protected]@@[email protected]) 

, 나는 같은이 세 가지 함수를 정의 :

bool InitShaderProgram(GLuint&); 
GLuint CreateShader(GLenum, const std::string&); 
GLuint CreateProgram(const std::vector<GLuint>&); 

이 기능을 사용하면 컴파일러는 이러한 기능의 출처를 이해하지 못합니다. 누구든지 나를 도울 수 있습니까?

+0

어떻게 컴파일하나요? –

+3

같은 주제에 관한 다른 모든 질문과 마찬가지로 : 기호 정의에 연결되지 않았습니다. 그들이 사는 곳을 알아 내고, 연결시키고, 끝내십시오. – PlasmaHH

+0

이러한 함수는 InitShaderProgram() 함수와 동일한 클래스에 있습니다. 기본적으로이 함수를 연결하지 않습니까? – valtari

답변

1

이 기능을 사용하면 컴파일러는 이러한 기능의 출처를 이해하지 못합니다.

불행히도 아니오. 컴파일러에서 오류가 아니라 링커에서 오류가 발생했습니다.

ShaderLoader :: CreateShader 및 ShaderLoader :: CreateProgram의 두 가지 기능을 이미 구현 했습니까? 아니면 머리글에 선언 되었습니까? 어떻게 연결합니까?

+1

대답이 아닙니다 ... –

2

해결되지 않은 외부 기호는 컴파일러가 작성한 코드를보고 컴파일하는 소스 파일의 모든 코드와 링커가 조회하는 데 필요한 심볼 세트를 생성했음을 의미합니다. 링커는 모든 객체 코드 파일을 가져 와서 정의 된 모든 심볼을 translation unit (소스 파일과 헤더라고 생각하십시오)에서 모든 심볼로 매핑합니다. 구현 된 기호를 찾을 수 없으면 해결되지 않은 외부 기호를 내 보냅니다.

일반적으로 이것은 개체 파일의 링커 목록에 라이브러리 개체 파일을 포함하지 못했기 때문입니다. 다른 함수는 함수를 선언하고 정의하지 않은 경우에 발생합니다.

은 정의되지 않은 기호

MAIN.CPP

int foo(); 

int main(int argc, char ** argv) 
{ 
    return foo(); 
} 

내가 foo는 정의되지 않았기 때문에이 불평을 방출한다.