2014-11-13 3 views
-1

OpenGL을 배우고 SDL2를 사용하고 있습니다. 내가 직면 한 문제는 내가 쓰는 코드가 C++로 컴파일되지 않지만 같은 코드가 C로 잘 컴파일 된 것 같다. 나는 프로그램 here의 작은 발췌 부분을 만들었다.OpenGL 프로그램은 C로 컴파일되지만 C++로는 컴파일되지 않습니다.

나는 컴파일하고 잘

$ gcc -o testgl testgl.c `pkg-config --cflags --libs sdl2 gl` 
$ ./test 
OpenGL version : 4.4.0 NVIDIA 340.58 

를 실행하지만 동일한 코드를 컴파일 할 때이 말에 따라 정확하게 문제로 아니지만 g ++

$ g++ -o testgl testgl.c `pkg-config --cflags --libs sdl2 gl` 
test.c: In function ‘int main()’: 
test.c:14:27: error: ‘glGenVertexArrays’ was not declared in this scope 
    glGenVertexArrays(1, &vao); 
         ^
test.c:15:23: error: ‘glBindVertexArray’ was not declared in this scope 
    glBindVertexArray(vao); 
        ^

를 사용하여 GCC를 사용하여이 코드를 컴파일 할 때 C++ 대신 C를 간단하게 사용할 수는 있지만, 왜 이런 일이 일어나고 이것을 해결할 수있는 방법이 있는지 알고 싶습니다.

환경 : 우분투 14.04, GCC 4.8, SDL 2

+0

gcc는 C 컴파일러가 아닙니다. 이것은 .cpp 확장자에 대해 g ++을 호출하는 다중 언어 컴파일 유틸리티입니다. 그래서 귀하의 경우, 문제가 헤더 문제 일 수 있다고 생각합니까? gcc가 당신의 플래그와 다른 플래그로 g ++를 호출했을 수도 있습니다. – galinette

+0

이전 주석에 잘못되었습니다. gcc가 g ++을 c 및 C++ 파일 모두에 대해 호출하더라도 .c 파일에 대해 gcc는 g ++에 C 플래그를 지정하고 g ++ 용 명령 줄은 C++ 표준에 대해 컴파일합니다. – galinette

답변

2

그것은 C는 C++가하는 반면, 함수 프로토 타입을 필요로하지 않기 때문에 이것이 가능성이 있습니다.

C로 컴파일하면 결국 libGL의 정의에 연결되어 작동합니다. 기술적으로 헤더를 필요로하지 않습니다. C++로 컴파일하면 함수 프로토 타입을 제공하는 헤더가 누락됩니다. GLEW를 사용하거나 OS 고유 API (예 : wgl, glx)로 GL 함수를 직접로드 할 수 있습니다.

관련 문제