나는 스택 오버 플로우와 구글을 알아 내려고 노력했지만, 동적 링크에 관해서 본 모든 것이 작동하지 않거나 정적 링크를 끝내게된다.Gake와 CMake를 동적으로 연결하기
E:/CLion/GLEW-Test/main.cpp:8: undefined reference to `[email protected]'
E:/CLion/GLEW-Test/main.cpp:12: undefined reference to `[email protected]'
E:/CLion/GLEW-Test/main.cpp:14: undefined reference to `[email protected]'
저는 CLION을 사용하여 GLEW를 동적으로 연결하려고합니다. 문제는 Visual Studio로 자랐습니다. 그래서 그것에 대해 많이 생각할 필요가 없었습니다. 나는 CMake와 OpenGL을 가르치려고 노력하고있어, 이것이 완벽한 운동이었을 것이다.
GLEW 용 소스를 다운로드하고 CMake 및 MinGW로 빌드했습니다. 나는 을 C:/Windows/System32/
에 넣었고 libglew32.a
을 C:/MinGW/lib
에 넣었고 , glxew.h
및 wglew.h
을 C:/MinGW/include/GL
에 넣었습니다.
현재 빌드 디렉토리에 glew32.dll
, libglu32.a
및 libopengl32.a
라이브러리가 있습니다. 여기
cmake_minimum_required(VERSION 3.8)
project(GLEW_Test)
set(CMAKE_CXX_STANDARD 11)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
set(CMAKE_VERBOSE_MAKEFILE on)
set(SOURCE_FILES main.cpp)
add_executable(GLEW_Test ${SOURCE_FILES})
target_link_libraries(GLEW_Test glew32 glu32 opengl32)
이 내 MAIN.CPP입니다 : 내가 #include <GL/glew.h>
전에 프로그램을 컴파일하고 예상 출력을 출력 #define GLEW_STATIC
경우, 지금
#include <iostream>
#include <GL/glew.h>
int main()
{
std::cout << "Hello, World!" << std::endl;
GLenum err = glewInit();
if (GLEW_OK != err)
{
/* Problem: glewInit failed, something is seriously wrong. */
fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
}
fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
return 0;
}
(GLContext가없는 것에 대한 오류). 그러나, 내 지식에, 그것은 정적 링크이며 동적으로 GLEW를 연결하고 싶습니다. 내가 잘못 뭐하는 거지
"C:\Program Files\JetBrains\CLion 2017.2.2\bin\cmake\bin\cmake.exe" --build E:\CLion\GLEW-Test\cmake-build-debug --target GLEW_Test -- -j 2
"C:\Program Files\JetBrains\CLion 2017.2.2\bin\cmake\bin\cmake.exe" -HE:\CLion\GLEW-Test -BE:\CLion\GLEW-Test\cmake-build-debug --check-build-system CMakeFiles\Makefile.cmake 0
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\Makefile2 GLEW_Test
mingw32-make.exe[1]: Entering directory 'E:/CLion/GLEW-Test/cmake-build-debug'
"C:\Program Files\JetBrains\CLion 2017.2.2\bin\cmake\bin\cmake.exe" -HE:\CLion\GLEW-Test -BE:\CLion\GLEW-Test\cmake-build-debug --check-build-system CMakeFiles\Makefile.cmake 0
"C:\Program Files\JetBrains\CLion 2017.2.2\bin\cmake\bin\cmake.exe" -E cmake_progress_start E:\CLion\GLEW-Test\cmake-build-debug\CMakeFiles 2
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\Makefile2 CMakeFiles/GLEW_Test.dir/all
mingw32-make.exe[2]: Entering directory 'E:/CLion/GLEW-Test/cmake-build-debug'
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\GLEW_Test.dir\build.make CMakeFiles/GLEW_Test.dir/depend
mingw32-make.exe[3]: Entering directory 'E:/CLion/GLEW-Test/cmake-build-debug'
"C:\Program Files\JetBrains\CLion 2017.2.2\bin\cmake\bin\cmake.exe" -E cmake_depends "MinGW Makefiles" E:\CLion\GLEW-Test E:\CLion\GLEW-Test E:\CLion\GLEW-Test\cmake-build-debug E:\CLion\GLEW-Test\cmake-build-debug E:\CLion\GLEW-Test\cmake-build-debug\CMakeFiles\GLEW_Test.dir\DependInfo.cmake --color=
mingw32-make.exe[3]: Leaving directory 'E:/CLion/GLEW-Test/cmake-build-debug'
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\GLEW_Test.dir\build.make CMakeFiles/GLEW_Test.dir/build
mingw32-make.exe[3]: Entering directory 'E:/CLion/GLEW-Test/cmake-build-debug'
[ 50%] Linking CXX executable GLEW_Test.exe
"C:\Program Files\JetBrains\CLion 2017.2.2\bin\cmake\bin\cmake.exe" -E cmake_link_script CMakeFiles\GLEW_Test.dir\link.txt --verbose=1
"C:\Program Files\JetBrains\CLion 2017.2.2\bin\cmake\bin\cmake.exe" -E remove -f CMakeFiles\GLEW_Test.dir/objects.a
C:\MinGW\bin\ar.exe cr CMakeFiles\GLEW_Test.dir/objects.a @CMakeFiles\GLEW_Test.dir\objects1.rsp
C:\MinGW\bin\g++.exe -Wall -Wextra -g -Wl,--whole-archive CMakeFiles\GLEW_Test.dir/objects.a -Wl,--no-whole-archive -o GLEW_Test.exe -Wl,--out-implib,libGLEW_Test.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles\GLEW_Test.dir\linklibs.rsp
CMakeFiles\GLEW_Test.dir/objects.a(main.cpp.obj): In function `main':
E:/CLion/GLEW-Test/main.cpp:8: undefined reference to `[email protected]'
E:/CLion/GLEW-Test/main.cpp:12: undefined reference to `[email protected]'
E:/CLion/GLEW-Test/main.cpp:14: undefined reference to `[email protected]'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [GLEW_Test.exe] Error 1
CMakeFiles\GLEW_Test.dir\build.make:98: recipe for target 'GLEW_Test.exe' failed
mingw32-make.exe[2]: *** [CMakeFiles/GLEW_Test.dir/all] Error 2
mingw32-make.exe[3]: Leaving directory 'E:/CLion/GLEW-Test/cmake-build-debug'
mingw32-make.exe[1]: *** [CMakeFiles/GLEW_Test.dir/rule] Error 2
CMakeFiles\Makefile2:69: recipe for target 'CMakeFiles/GLEW_Test.dir/all' failed
mingw32-make.exe[2]: Leaving directory 'E:/CLion/GLEW-Test/cmake-build-debug'
CMakeFiles\Makefile2:81: recipe for target 'CMakeFiles/GLEW_Test.dir/rule' failed
mingw32-make.exe[1]: Leaving directory 'E:/CLion/GLEW-Test/cmake-build-debug'
Makefile:120: recipe for target 'GLEW_Test' failed
mingw32-make.exe: *** [GLEW_Test] Error 2
: 이것은 내가 #define GLEW_STATIC
없이 컴파일 할 때 내가 볼 무엇인가? 나는 glew's sourceforge에서 가이드를 따르고 .dll을 내 System32 폴더에 두었습니다. CMake와 MinGW로 만들었으므로 .lib 파일 대신 .a 파일을 가지고 있으며, MinGW/lib 디렉토리에 그것들을 찔러 넣었습니다. 내가 모르는 유일한 이유는 내 libglew32.dll.a와 아무런 관련이 없다. 이것이 범인인가? 나는 그것으로 무엇을 해야할지 모르겠다. 그리고 .dll.a 파일에 대한 정보를 인터넷 검색은 아무것도 나타나지 않았다.
일반적으로 실제 컴파일러 호출을보고 올바른 옵션을 찾기 위해 수동으로 실행하려면'make '의 자세한 정보를 늘리십시오. 'make VERBOSE = 1'이 그것에 사용됩니다. 'cmake.exe -build E : \ CLion \ GLEW-Test \ cmake-build-debug --target GLEW_Test - -j 2 VERBOSE = 1 이렇게하면 'mingw32-make.exe'로 같은 것을 시도 할 수 있습니다. 왜냐하면'cmake.exe --build'는 기본적으로'make' 호출이기 때문입니다. 라이브러리에 관해서 : 저는 어떤 구성이라도'target_link_libraries (GLEW_Test libglew32 libglu32 libopengl32)'이어야한다고 생각합니다 (정적 또는 동적 링크는 다른 곳에서 결정됩니다). – Velkan
자세한 출력을 업데이트했습니다. 나는 다른 것을 보지 못한다. 그것은 링크 후 일부 glew 기능을 해결할 수없는 것 같습니다. – Acorn