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

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

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

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2427閲覧

SOIL.libファイルをビルドし直したて本番環境に導入たら定義がありませんというエラーが発生する理由と原因が知りたい Githubにコード

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/08/18 02:48

編集2020/08/30 00:23

ライブラリの変更内容

元データを使ってビルドし直ししようとしてとりえずエディタに乗っけたら拡張子の違いでc,c++の違いでエラーになったのですべて.hpp .cppファイルに仕方なく変更しました。元は.h .cです。

質問内容

ビルドは成功して本番環境(使いたいプロジェクト)に移行したらヘッダーは読み込めましたがビルドでSOIL.lib 定義がありませんというエラーが多発します。
これはなぜでしょうか?

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー LNK2001 外部シンボル __imp_glClear は未解決です Project1 \Game.obj 1
エラー LNK2001 外部シンボル __imp_glClearColor は未解決です Project1 \Game.obj 1
エラー LNK2001 外部シンボル __imp_glGetError は未解決です Project1 \Game.obj 1
警告 LNK4075 /INCREMENTAL は /LTCG の指定によって無視されます。Project1 \LINK 1
警告 LNK4098 defaultlib 'MSVCRT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 Project1 \LINK 1
エラー LNK2001 外部シンボル __imp_glBindTexture は未解決です Project1 \SOIL.lib(SOIL.obj) 1
エラー LNK2001 外部シンボル __imp_glDeleteTextures は未解決ですProject1 \SOIL.lib(SOIL.obj) 1
エラー LNK2001 外部シンボル __imp_glGenTextures は未解決です Project1 \SOIL.lib(SOIL.obj) 1
エラー LNK2001 外部シンボル __imp_glTexImage2D は未解決です Project1 \SOIL.lib(SOIL.obj) 1
エラー LNK2001 外部シンボル __imp_glTexParameteri は未解決です Project1 \SOIL.lib(SOIL.obj) 1
エラー LNK2001 外部シンボル __imp_glReadPixels は未解決です Project1 \SOIL.lib(SOIL.obj) 1
エラー LNK2001 外部シンボル __imp_wglGetProcAddress は未解決です Project1 \SOIL.lib(SOIL.obj) 1
エラー LNK2001 外部シンボル __imp_glGetString は未解決です Project1 \SOIL.lib(SOIL.obj) 1
エラー LNK2001 外部シンボル __imp_glGetIntegerv は未解決です Project1 \SOIL.lib(SOIL.obj) 1
エラー LNK2001 外部シンボル __imp_glBlendFunc は未解決です Project1 \SpriteComponent.obj 1
エラー LNK2001 外部シンボル __imp_glDrawElements は未解決です Project1 \SpriteComponent.obj 1
エラー LNK2001 外部シンボル __imp_glEnable は未解決です Project1 \SpriteComponent.obj 1
エラー LNK2001 外部シンボル __imp_glBindTexture は未解決です Project1 \Texture.obj 1
エラー LNK2001 外部シンボル __imp_glDeleteTextures は未解決です Project1 \Texture.obj 1
エラー LNK2001 外部シンボル __imp_glGenTextures は未解決です Project1 \Texture.obj 1
エラー LNK2001 外部シンボル __imp_glTexImage2D は未解決です Project1 \Texture.obj 1
エラー LNK2001 外部シンボル __imp_glTexParameteri は未解決です Project1 \Texture.obj 1
エラー LNK1120 15 件の未解決の外部参照 Project1 \Project1.exe 1
」※パス名だけ長く意味もないので削除しました。

Github

Visual studio 2019でビルド .lib

orijinal: 原版のデータ
jisakuban: 自分でビルドするためにエラーを編集したコード

GitHub: https://github.com/Shigurechan/SOIL_build

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

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

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

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

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

maisumakun

2020/08/18 02:50

> 作者サイトがもうすでにリンク切れのため探して2008年版のものしかないため そんなライブラリを無理して使うより、きちんと保守されている別種のライブラリに乗り換えたほうが正解かと思います。
退会済みユーザー

退会済みユーザー

2020/08/18 02:58

それが調べましたがないのです。一番新しいのは2012年版のファイルをたまたまネット上で見つけたのでコンパイルしましたが実行はできるのですが リリースでエラーになるのでおそらくlibファイルが原因なのでこのlibファイルを再コンパイルする必要があるのではと考えました。
maisumakun

2020/08/18 03:02 編集

何をするライブラリなのですか? 「そのまま差し替えて使えるライブラリ」はないかもしれませんが、「同じ仕事ができるライブラリ」が皆無ということは(特定のハードウェア・ソフトウェアなど外部リソースに依存するようなものを除けば)考えづらいです。
退会済みユーザー

退会済みユーザー

2020/08/18 03:01

soil.libです。デバッグで実行はできるのですがリリースをするとエラーがでます。 別のバージョンで作成されたどうのこうの言われているのでこれはlibファイルが古いため新しいものを使えということなので再ビルド?してlibファイルを新しく生成する必要があると考えたのですがどうすればいいのでしょうか?
maisumakun

2020/08/18 03:04

「soil.libは放棄して、別な方法で画像を処理する」ほうが合理的ではないかと考えます。
退会済みユーザー

退会済みユーザー

2020/08/18 03:23

出来ました。原因はVSの設定側に問題がありました。設定でインクルードファイルを設定しないでD&Dしていたためと思われます。そして本番環境に.libを以降しました。別のエラーが出ていますが自分で考えてからにします。
guest

回答1

0

ベストアンサー

OpenGL関連の必要なライブラリがリンクされていないだけだと思うので、
エラーが出てる関数名で "imp_" 以降を検索してMSのAPIリファレンスのLibraryを確認してリンクしてください。
glClear function

プロジェクトのプロパティで設定出来ますが、ソース中に記入することも可能です。

C++

1#pragma comment(lib, "opengl32.lib")

投稿2020/08/31 04:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/09/01 05:24

質問ですが.libはプロパティに設定するやり方を知りましたが.dllはどうすればいいかわかりますでしょうか?
退会済みユーザー

退会済みユーザー

2020/09/01 06:38

OSに元々入っているDLLの場合は特に何もしなくても問題ありませんが、そうでないものは追加でDLLを含むランタイムライブラリをインストールするか、EXEと同じディレクトリまたはpathの通っている場所に配置する必要があります。 DLL毎に対応が違うので、それは自分で調べてください。
退会済みユーザー

退会済みユーザー

2020/09/01 11:53

.libを入れても.dllが必要な場合がりますが.libと.dllはどう違うのでしょうか?調べましたがなぜ両方必要な場合がるのか?ということが知りたいです。静的リンク動的リンクとうについては自分で調べました
退会済みユーザー

退会済みユーザー

2020/09/01 12:50 編集

libでも、関数の実装を含むスタティックライブラリと、DLLとの紐づけだけを行うインポートライブラリがあります。前者はリンクするとEXE単体で動きますが、後者だとリンクしてもEXE実行時に紐づけをしたDLLが必要になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問