1

周りをグーグルで調べたところ、「間違ったVSライブラリ」であることがわかりましたが、glew32.libの代わりにglew -1.5.4-mingw32libgluew32.aを使用しようとしても(そして同じように過剰に行われました)、何も変わりませんでした。

main.cppは VS2012 のプロジェクトから取得し、同じライブラリをアタッチしているため、間違っていない可能性があります。

私が作成するために使用するいくつかのファイル:

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.4)
project(HelloGL)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

add_executable(HelloGL main.cpp)

set(LIBS_DIR D:/libs)

set(GLEW_ROOT_DIR ${LIBS_DIR}/glew-1.5.4-mingw32 )
set(GLUT_ROOT_DIR ${LIBS_DIR}/glut-3.7.6-src/glut-3.7.6 )

set(GLEW_INCLUDE_DIRS ${GLEW_ROOT_DIR}/include)
set(GLUT_INCLUDE_DIRS ${GLUT_ROOT_DIR}/include)

set(GLEW_LIBRARY ${GLEW_ROOT_DIR}/lib/libglew32.a)
set(GLUT_LIBRARY ${GLUT_ROOT_DIR}/lib/glut/libglut32.a)


include_directories( ${GLEW_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS} )

target_link_libraries(HelloGL ${GLEW_LIBRARY} ${GLUT_LIBRARY} )

ログの一部:

 "D:\Tools\CLion 140.569.17\bin\cmake\bin\cmake.exe" --build C:\Users\Alexey\.clion10\system\cmake\generated\dc6fcb22\dc6fcb22\Debug --target HelloGL -- -j 8
    -- Configuring done
    -- Generating done
    -- Build files have been written to: C:/Users/Alexey/.clion10/system/cmake/generated/dc6fcb22/dc6fcb22/Debug
    Linking CXX executable HelloGL.exe
    CMakeFiles\HelloGL.dir/objects.a(main.cpp.obj): In function `Z11LoadShadersPKcS0_':
    D:/Projects/CPP/HelloGL/main.cpp:19: undefined reference to `_imp____glewCreateShader'
    D:/Projects/CPP/HelloGL/main.cpp:20: undefined reference to `_imp____glewCreateShader'
    D:/Projects/CPP/HelloGL/main.cpp:56: undefined reference to `_imp____glewShaderSource'
    D:/Projects/CPP/HelloGL/main.cpp:57: undefined reference to `_imp____glewCompileShader'
    D:/Projects/CPP/HelloGL/main.cpp:60: undefined reference to `_imp____glewGetShaderiv'
    D:/Projects/CPP/HelloGL/main.cpp:61: undefined reference to `_imp____glewGetShaderiv'
    D:/Projects/CPP/HelloGL/main.cpp:64: undefined reference to `_imp____glewGetShaderInfoLog'
4

3 に答える 3

4

次の行を に追加してみてくださいCMakeLists.txt:

add_definitions(-DGLEW_STATIC)

静的にリンクしようとしているようですがGLEW、定義していませんGLEW_STATIC

于 2015-01-18T16:37:50.250 に答える
0

GLEW を自分でコンパイルしましたか?

通常、呼び出されるライブラリglew32は動的リンクであり、glew32s静的です。MinGW は GLEW の動的 (DLL) バージョンが好きではないので、おそらく避けるべきです。GLEW サイトで配布されているビルド済みの Windows 動的 GLEW ライブラリは、インポート ライブラリに対する Visual C++ と gcc の関数命名規則の違いにより、MinGW では動作しません (アンダースコアが 1 つ違うだけで、作業が非常に難しくなります)。 )。

#define GLEW_STATICそれを含め<glew.h>てリンクする前glew32sに、動的リンクライブラリの潜在的な問題を排除します。実際には、Nazar554 が示したように、定義を Makefile に追加すると、これが最もうまく機能します。

于 2015-01-18T21:56:23.370 に答える