質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

Q&A

解決済

2回答

2481閲覧

OpenGLでのglad初期化の部分で、"Build Failed"になってしまいます。

goto-c

総合スコア3

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

0グッド

0クリップ

投稿2020/05/29 02:32

編集2020/06/10 22:48

前提・実現したいこと

開発初心者です。以下のような環境で、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/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

glad/src/glad.c」の中身を確認してください。
空っぽということはないですか?

投稿2020/06/10 15:26

katsuko

総合スコア3462

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

ベストアンサー

私はGLADを使ったことがないのですがGLFWDraft.pdfは一読したので調べてみました。GLADとCMakeが出てくる記事を見つけました。サブディレクトリgladの中にもCMakeLists.txtを置いてましたのでそれが原因なのかなと思います。

ちなみに私はCMake知りません。OpenGL Programming Guideを読むのに難儀してます。教えてくださいw

OpenGL入門から3DCGレンダラ実装まで その1

投稿2020/06/10 14:48

編集2020/06/10 14:51
anndonut

総合スコア667

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

goto-c

2020/06/10 23:16

ご回答ありがとうございます。 申し訳ありません、ディレクトリ構成にCMakeLists.txtなどのいくつかの要素を省略して書いてしまっていました。今、正しいものに書き換えましたが、実はCMakeLists.txtは置いてあります。 もしかして、main.cppのコンパイルの前にgladやglfwをcmakeする必要があるのでしょうか? 私もcmakeは今回の開発で初めて触るんですが、ビルド周辺はなかなか分かりづらくて苦労しています…^^;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問