1

非公式の OpenGL SDK ライブラリを機能させようとしており、matrixStack 機能に glutil ライブラリの使用を開始しました。Visual Studio 2010 を使用してソースをコンパイルし、ライブラリを Code::Blocks フォルダーにある minGW フォルダーに移動しました。ヘッダー ファイルもそこのインクルード フォルダーに移動しました。

すべてが整っている必要があり、OS 用にコンパイルする必要があるため、次のコードは問題なく動作するはずです。

    // Get rotation matrix
    //float rotValue = (glutGet(GLUT_ELAPSED_TIME)) / 10;
    glm::mat3 rotMatrix = RotateAxis(0.0f, 0.0f, 1.0f, 0.0f);
    // Build final matrix from rotMatrix
    glm::mat4 finalMatrix(rotMatrix);
    finalMatrix[3].x = camX;
    finalMatrix[3].y = camY;
    finalMatrix[3].z = camZ - 1.0f;
    finalMatrix[3].w = 1.0f;

    glutil::MatrixStack stack(finalMatrix);
    glutil::PushStack push(stack);


    // Object 1
    glBindVertexArray(vaoObject);          // Advantage of using vao's is that you only have to do all the vertex attribute enabling and buffer stuff once.
    glUniformMatrix4fv(modelToCameraMatrixUnif, 1, GL_FALSE, glm::value_ptr(stack.Top()));
    glDrawElements(GL_TRIANGLES, ARRAY_COUNT(indexData), GL_UNSIGNED_SHORT, 0);
    // Object 2
    stack.Translate(glm::vec3(0.0f, 0.5f, 0.0f));       // THIS IS WHERE THINGS GO WRONG
    finalMatrix[3].z = camZ - 2.00f;
    glUniformMatrix4fv(modelToCameraMatrixUnif, 1, GL_FALSE, glm::value_ptr(stack.Top()));
    glDrawElementsBaseVertex(GL_TRIANGLES, ARRAY_COUNT(indexData), GL_UNSIGNED_SHORT, 0, 36/2);

stack.Translate を呼び出すと、次のエラーが生成されます: undefined reference to 'glutil::MatrixStack::Translate(glm::detail::tvec3 const&)'は、translate 呼び出しなしで MatrixStack および PushStacks のコンストラクターが機能するため、非常に奇妙です。これは奇妙です。

-glutil をリンカーに追加しようとしましたが、問題は解決しませんでした。

ヘッダーには以下が含まれます (openGL に関連):

// Open GL and GLUT
#include <gl/glew.h>
#include <gl/glut.h>

// Open GL Libraries
#include <glm/glm.hpp>
#include <glm/gtc/type_ptr.hpp>
#include <glutil/glutil.h>

OpenGL SDKがWebサイトにこの情報を表示しなかったため、ライブラリをリンクする正しい名前を見つける方法がまだわからないため、-glutilが正しいかどうかはわかりません。問題はリンク段階に関係していると思います。

4

1 に答える 1

1

MinGW の下で VC++ によってコンパイルされた C++ コードを使用していますか? これらのコンパイラの ABI が異なることをご存知ですか? 名前マングリング スキームでさえ異なるため、リンクできない理由を説明できます。mingw リンカーからの関数名のマングルされていないバージョン (エラー レポートのどこかにあるはず) が glutil からエクスポートされたものと一致するかどうかを確認します。DLL Export Viewer - または glutil は静的にリンクされていますか? 一致しない場合は、ライブラリとコードの両方に同じコンパイラを使用する必要がある可能性があります。

于 2012-09-08T11:38:20.570 に答える