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

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

新規登録して質問してみよう
ただいま回答率
86.12%
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言語をベースとしたシェーディング言語です。

解決済

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

goto-c
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言語をベースとしたシェーディング言語です。

2回答

0グッド

0クリップ

1871閲覧

投稿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/

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

0

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

投稿2020/06/10 15:26

katsuko

総合スコア3255

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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は今回の開発で初めて触るんですが、ビルド周辺はなかなか分かりづらくて苦労しています…^^;

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

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言語をベースとしたシェーディング言語です。