前提・実現したいこと
開発初心者です。以下のような環境で、OpenGLのプログラマブルシェーダを使用し、まずはウィンドウの表示を目指しています。
・Mac Book Air 2015(version 10.15.4)
・Xcode(version11.5)
・OpenGL
・GLFW
・GLAD(version3.3)
「cmake で build ディレクトリに XcodeProject を作成 → Xcodeで実行」 という流れで作業を行っています。
コードなどはこちらのPDF(https://tokoik.github.io/GLFWdraft.pdf)を主に参考にさせていただいています。
発生している問題・エラーメッセージ
Undefined symbols for architecture x86_64: "_gladLoadGLLoader", referenced from: _main in main.o "_glad_glClearColor", referenced from: _main in main.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
該当のソースコード
c++
1#include <iostream> 2#include <glad/glad.h> 3#include <GLFW/glfw3.h> 4#include <cstdlib> 5#include <cstdio> 6 7 8 9int main(){ 10 11 // GLFWを初期化する 12 if (glfwInit() == GL_FALSE){ 13 // 初期化に失敗した 14 std::cerr << "Can't Initialize GLFW" << std::endl; 15 return 1; 16 } 17 18 // プログラム終了時の処理を登録する 19 atexit(glfwTerminate); 20 21 // OpenGL version3.2Core Profile を選択する 22 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 23 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); 24 glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 25 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 26 27 28 #ifdef __APPLE__ 29 glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // uncomment this statement to fix compilation on OS X 30 #endif 31 32 // ウィンドウを作成する 33 GLFWwindow *const window(glfwCreateWindow(640, 480, "Hello!", NULL, NULL)); 34 if (window == NULL){ 35 // ウィンドウが作成できなかった 36 std::cerr << "Can't create GLFW window" << std::endl; 37 return 1; 38 } 39 40 // 作成したウィンドウをOpenGLの処理対象にする 41 glfwMakeContextCurrent(window); 42 43 // GLADを初期化する 44 if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) 45 { 46 std::cout << "Failed to initialize GLAD" << std::endl; 47 return -1; 48 } 49 50 //if (!gladLoadGLLoader(reinterpret_cast<GLADloadproc>(glfwGetProcAddress))){ 51 // std::cerr << "Failed to initialize GLAD" << std::endl; 52 // return -1; 53 //} 54 //gladLoadGLLoader((GLADloadproc)glfwGetProcAddress); 55 56 // 垂直同期のタイミングを待つ 57 glfwSwapInterval(1); 58 59 // 背景色を指定する 60 glClearColor(1.0f, 1.0f, 1.0f, 0.0f); 61 62 // ウィンドウが開いている間繰り返す 63 while (glfwWindowShouldClose(window) == GL_FALSE){ 64 // ウィンドウを消去する 65 //glClear(GL_COLOR_BUFFER_BIT); 66 67 // 68 // ここで描画処理を行う 69 // 70 71 // カラーバッファを入れ替える 72 glfwSwapBuffers(window); 73 74 // イベントを取り出す 75 glfwWaitEvents(); 76 } 77} 78
試したこと
❶"CMakeLists.txt" の "target_link_libraries" に "../glad" を追加し、cmakeからやり直す。
❷Xcode/"Build Settings" の "Header Search Paths" と "Library Search Paths" に、以下を追加。
" /Users/○○○/Desktop/OpenGL/squareNewGlad/../glfw/include " " /Users/○○○/Desktop/OpenGL/squareNewGlad/../glad/include "
❸"Other Linker Flags" に、以下を1行ずつ記入。
-Wl,-search_paths_first -Wl,-headerpad_max_install_names -framework OpenGL -framework OpenGL /Users/○○○/Desktop/OpenGL/glfw/src/libglfw3.a -framework Cocoa -framework IOKit -framework CoreVideo
❹main.cppのソースコードで、「// GLADを初期化する」と書いた部分と "glClearColor" という部分を消去すると、" Build Succeeded "となり黒い窓が表示されました。
したがって、GLADの初期化が上手くいっていないため gl~ から始まる命令 (上記のソースコードではglClearとglClearColor) が全て通じなくなっているのではないかと推測しています。
❺ ❹に書いた問題を解決すべく、 "Other Linker Flag" に "glad" などを追加してみましたが、やはりエラーが出てしまいます。そこで"glad"の記入の仕方が間違っていると思い、ここの書き方を調べてみましたが、良い情報を見つけられませんでした。
clang: error: no such file or directory: 'glad'
補足情報(FW/ツールのバージョンなど)
CMakeLists.txt
# CMakeのバージョンを設定 cmake_minimum_required(VERSION 2.8) # プロジェクト名と使用する言語を設定 project(squareNewGlad CXX) set(CMAKE_CXX_FLAGS "-Wall -Wno-deprecated-declarations -g") set(GLFW_LIBRARY /Users/Chihiro/Desktop/OpenGL/glfw/src/libglfw3.a) #get_filename_component(GLFW_LIBRARY ${GLFW_LIBRARY} ABSOLUTE) find_package(OpenGL REQUIRED) # a.outという実行ファイルをmain.cppとhello.cppから作成 add_executable(a.out ../glad/src/glad.c main.cpp) include_directories( ../glfw/include ../glad/include) find_library( COCOA_LIBRARY Cocoa ) find_library( IOKIT_LIBRARY IOKit ) find_library( COREVIDEO_LIBRARY CoreVideo ) target_link_libraries(a.out ${OPENGL_LIBRARY} ${GLFW_LIBRARY} ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY} )
ディレクトリ構成
OpenGL/ ├── squareNewGlad/ ├── CMakeLists.txt/ ├── main.cpp/ └── build/ └── squareNewGlad.xcodeproj/ ├── glfw/ : ├── CMakeLists.txt/ ├── include/ └── src/ └── glad/ ├── CMakeLists.txt/ ├── include/ └── src/
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/10 22:45