🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenGL

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

Q&A

1回答

4432閲覧

Visual Studio2019 C++でOpenGL実行時のリンカーエラー[LNK2019]

AK4

総合スコア0

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenGL

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

0グッド

0クリップ

投稿2021/01/19 13:37

編集2021/01/19 13:45

イメージ説明### 前提・実現したいこと

Visual Studio2019community C++を使用してOpenGLを用いたコードの実行

ソースコードに異常はなかったのですが、実行時にリンカーに関するエラーが発生しました。
(以前まで使っていたPCで実行できたコードを新しいPCのVisual Studio2019に貼り付けたからかもです。)

発生している問題・エラーメッセージ

LNK2019 未解決の外部シンボル __imp_glBegin が関数 "void __cdecl bullion(double,double)" (?bullion@@YAXNN@Z) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1
※bullionは自分で定義した関数名です。

LNK2019 未解決の外部シンボル __imp_glClear が関数 "void __cdecl display(void)" (?display@@YAXXZ) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK2019 未解決の外部シンボル __imp_glClearColor が関数 "void __cdecl myInit(char *)" (?myInit@@YAXPEAD@Z) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK2019 未解決の外部シンボル __imp_glColor3f が関数 "void __cdecl bullion(double,double)" (?bullion@@YAXNN@Z) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK2019 未解決の外部シンボル __imp_glDisable が関数 "void __cdecl display(void)" (?display@@YAXXZ) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK2019 未解決の外部シンボル __imp_glEnable が関数 "void __cdecl display(void)" (?display@@YAXXZ) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK2019 未解決の外部シンボル __imp_glEnd が関数 "void __cdecl bullion(double,double)" (?bullion@@YAXNN@Z) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK2019 未解決の外部シンボル __imp_glLoadIdentity が関数 "void __cdecl myInit(char *)" (?myInit@@YAXPEAD@Z) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK2019 未解決の外部シンボル __imp_glMaterialf が関数 "void __cdecl SetShineness(float)" (?SetShineness@@YAXM@Z) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK2019 未解決の外部シンボル __imp_glMaterialfv が関数 "void __cdecl SetAmbient(float,float,float)" (?SetAmbient@@YAXMMM@Z) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK2019 未解決の外部シンボル __imp_glMatrixMode が関数 "void __cdecl myInit(char *)" (?myInit@@YAXPEAD@Z) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK2019 未解決の外部シンボル __imp_glPopMatrix が関数 "void __cdecl display(void)" (?display@@YAXXZ) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK2019 未解決の外部シンボル __imp_glPushMatrix が関数 "void __cdecl display(void)" (?display@@YAXXZ) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK2019 未解決の外部シンボル __imp_glVertex3f が関数 "void __cdecl bullion(double,double)" (?bullion@@YAXNN@Z) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK2019 未解決の外部シンボル gluPerspective が関数 "void __cdecl myInit(char *)" (?myInit@@YAXPEAD@Z) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK2019 未解決の外部シンボル gluLookAt が関数 "void __cdecl display(void)" (?display@@YAXXZ) で参照されました openGL1 C:\Users\Owner\source\repos\openGL1\openGL1\main.obj 1

LNK1120 16 件の未解決の外部参照 openGL1 C:\Users\Owner\source\repos\openGL1\x64\Debug\openGL1.exe 1

コード・該当の言語

コードの入ってるGitHub

C++を使ってます。
コードにエラーは無いはずです。
include <stdlib.h>
include "glut.h"
include "gl.h"
include "glu.h"
include <math.h>
を使用しました。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\VS\include\GL
に上記のヘッダーファイルを保存してます。

試したこと

libファイルが足りてないと思い、OpenGL32.lib GlU32.lib glut32.libを保存しました。libファイルの保存先が間違ってると思い試した結果
C:\Users\Owner\source\repos\ファイル名
に保存した結果エラー数が31から17に減りました。

プログラム名のプロパティ>リンカー>入力>新規で上記のlibファイル名を入れたのですが変化はなかったです。
新規<OpenGL32.lib GlU32.lib glut32,lib

バージョンの違いかと思いlegacy_stdio_definitions.libをリンカーに入力してもダメでした。

×64から×86にしたり、デバッグからリリースにしたりしましたが駄目でした。

補足情報(FW/ツールのバージョンなど)

surfaceのlap-topを使ってます。
windowsのedition:windows10 pro
システムの種類:64bit オペレーティングシステム×64ベースプロセッサ

_imp__以降の関数は使った覚えがあるのですが、impが付いてしまうはどのような意味を示すのでしょうか。

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

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

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

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

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

jbpb0

2021/01/19 16:00 編集

> OpenGL32.lib GlU32.lib glut32.libを保存しました。 64bitアプリをビルドするのなら、ファイル名に32じゃなくて64が付いてる.libファイルとリンクさせないといけないのでは?? 【追記】下記Webページによると、64bit用.libファイルもファイル名には32が付いてて、32bit用と64bit用は置いてあるフォルダが違う、とのこと https://social.msdn.microsoft.com/Forums/vstudio/en-US/51dae5ef-c375-493e-99a2-9e659ac6192c/error-lnk2001-unresolved-external-symbol-impglpopmatrix?forum=vcgeneral 64bit用の.libファイルを使ってますでしょうか?
jbpb0

2021/01/19 15:42 編集

GitHubのを見ると、そちらもファイル名に32が付いてる.libファイルを指定してますけど、こちらも64では?? > //#pragma comment(lib, "OpenGL32.Lib") 【追記】コメントになってるのを見落としてました 失礼しました
AK4

2021/01/19 16:23

>64bitアプリをビルドするのなら、ファイル名に32じゃなくて64が付いてる.libファイルとリンクさせないといけないのでは?? [glut64.lib ダウンロード]などで検索してみたのですが、当該するような項目が見つけられませんでした。申し訳ありません。良ければURLを教えてもらえると助かります。 https://qiita.com/sonio/items/4387ec1c8d7af8979b35 ↑windows10の例として、このURLを参考にしてみたのですが、ダメでした。 >GitHubのを見ると、そちらもファイル名に32が付いてる.libファイルを指定してますけど、こちらも64では?? コメントアウトしていたコードなのですが、紛らわしいので消しました。
jbpb0

2021/01/19 16:30

一つ目のコメントに追記したので、読んでください Webページは書かれた時期が古いので、そこに書かれてるフォルダ構成は今とは違うかもしれませんが、32bit用と64bit用がファイル名が同じで置き場所が違うことは、おそらく今も変わらないと思います
Bull

2021/01/19 23:36

GLUT には 64bit のバイナリーはなかったと思います。 x86 でビルドしてもダメでしょうか? プロジェクトのプロパティの詳細な情報を補足して頂けませんか?
jbpb0

2021/01/20 00:31

> オリジナルのGLUTは、もうだいぶ前からメンテされてないようですから、32bitだけで終わったんですね http://www.slis.tsukuba.ac.jp/~fujisawa.makoto.fu/cgi-bin/wiki/index.php?OpenGL#f1238cad より引用 GLUTはversion3.7 (1998年) を最後として,それ以降開発されていません. freeglutはGLUT(OpenGL Utility Toolkit)の代替となるオープンソースのOpenGLツールキットであり,GLUTの命令と完全に互換性を持っています. https://www.opengl.org/resources/libraries/glut/ より引用 We direct you to use FreeGLUT found on SourceForge: http://freeglut.sourceforge.net/. The original GLUT has been unsupported for 20 years. 本家もFreeGLUT使うことを勧めてますね
jbpb0

2021/01/20 00:48

まとめると、こんな感じですかね (間違えていたら、つっこんでください) ・OpenGL本体はWindowsに同梱されていて、32bit用, 64bit用どちらもあるが、置いてるフォルダが違うので、それ間違えるとハマる (詳細は、私の最初のコメントに貼ったURLを参照) ・オリジナルのGLUTは20年以上前に開発が終わっていて、32bit用のしかない ・GLUT後継のfreeglutは、32bit用, 64bit用どちらもある
Bull

2021/01/20 05:54

合っていると思います。 付け加えるとすると、OpenGL32.lib、GlU32.lib は特に指定する必要はなかったと思います。 GLUT は freeglut で置換え可能だと思いますが、完全に置換えられるのかは確認してないです。 freeglut も開発が止まっているようですが、これも詳細はよくわからないのです。 プロジェクトのプロパティに問題がある可能性が高いですが、良くあるのは、"Release/x86" だけ設定して、ビルドは "Debug/x86" でおこなっているとかですかね。
AK4

2021/01/20 07:56

皆さん回答いただき、誠にありがとうございます。 freeglut環境で実装できないか、試してみたいと思います。 >プロジェクトのプロパティに問題がある可能性が高いですが、良くあるのは、"Release/x86" だけ設定して、ビルドは "Debug/x86" でおこなっているとかですかね。 ソリューションプラットフォームをx64からx86に変えた結果エラー数が17から13になりました。。
jbpb0

2021/01/20 08:11

リンクに使う.libファイルとか、Visual Studioの各種設定とか、全てを32bit仕様で統一すれば、オリジナルGLUTでもコンパイルできるはずなんですよね?? 32bitでもエラーが無くならないのは、謎です
AK4

2021/01/20 08:17

>プロジェクトのプロパティの詳細な情報を補足して頂けませんか? 構成(C):アクティブ(Debug) プラットフォーム(P):x64 出力ディレクトリ:$(SolutionDir)$(Platform)\$(Configuration)\ 中間ディレクトリ:$(Platform)\$(Configuration)\ ターゲット名:$(ProjectName) 構成の種類:アプリケーション(.exe) Windows SDKバージョン:10.0 プラットフォームツールセット:Visual Studio2019(v142) C++言語標準:既定 C言語標準:既定 詳細に追記してほしい箇所がありましたら、迅速に対応致しますので宜しくお願い致します。
guest

回答1

0

「質問への追記・修正の依頼」にも書きましたが、プロジェクトのプロパティの構成とプラットフォームはビルド時のものと同じでなくてはなりません。
またGLUTの場合は、プラットフォームx86でないとリンクでエラーになるかと思います。

コンパイルはできているようなので、リンカーの設定を修正すればビルドできるようになるのではないかと思います。
リンカー全般追加のライブラリ ディレクトリglut32.libを格納したディレクトリを指定すればいいです。
入力追加の依存ファイルは特に追加しなくとも自動的にglut32.libをリンクします。

投稿2021/01/20 09:49

Bull

総合スコア986

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問