実現したいことと問題
OpenAL Softのサンプルプログラム(altonegen.c)を実行させたいのですが,
LNK2019が生じてしまい実行できていません.
他の質問を参考にプロパティなどを変え,他のエラーは出なくなったのですが,以下に示す問題だけ解決しません.
環境
windows10
システムの種類 64 ビット オペレーティング システム、x64 ベース プロセッサ
visual studio 2019
OpenAL Soft 1.22.0
発生している問題・エラーメッセージ
エラー文のInitAL,CloseAL,al_nssleep等は,alhelpers.hで定義された関数です.
1>------ ビルド開始: プロジェクト: test2, 構成: Debug x64 ------ 1>ソース.obj : error LNK2019: 未解決の外部シンボル InitAL が関数 "int __cdecl my_main(int,char * *)" (?my_main@@YAHHPEAPEAD@Z) で参照されました 1>ソース.obj : error LNK2019: 未解決の外部シンボル CloseAL が関数 "int __cdecl my_main(int,char * *)" (?my_main@@YAHHPEAPEAD@Z) で参照されました 1>ソース.obj : error LNK2019: 未解決の外部シンボル al_nssleep が関数 "int __cdecl my_main(int,char * *)" (?my_main@@YAHHPEAPEAD@Z) で参照されました 1>MSVCRTD.lib(exe_winmain.obj) : error LNK2019: 未解決の外部シンボル WinMain が関数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) で参照されました 1>C:\Users\Shimizu\source\repos\test2\x64\Debug\test2.exe : fatal error LNK1120: 4 件の未解決の外部参照 1>プロジェクト "test2.vcxproj" のビルドが終了しました -- 失敗。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
試したことや調べたこと
1. OpenALsoftのHPからダウンロードし,必要なライブラリやヘッダファイルを入手しました.
OpenAL soft -> Download
ダウンロード①
The latest release is 1.22.0, and is available in source form.
openal-soft-1.22.0.tar.bz2
→ヘッダファイルなど
ダウンロード②
Win32 and Win64 binaries are also provided.
openal-soft-1.22.0-bin.zip
→主にWin64用のライブラリ
2. 必要なファイルをtest2.slnがあるディレクトリに移動
ヘッダファイルは全てmy_headerという名前のフォルダにまとめ,ソリューションファイル(今回で言うtest2.sln)があるディレクトリに置いています.同じディレクトリにライブラリであるOpenAL32.libをmy_libraryという名前のフォルダに入れています.
3. 調べたこと
他の質問を調べて,プロパティの設定を変えてみたのですが,上記のエラーだけ解決できません.ライブラリのリンカを正しく指定したり,ヘッダファイルに対するincludeパスを指定したり,追加の依存ファイルにOpenAL32.libを指定したりしましたが,うまくいきません.
プラットフォームはx64でデバッグを行いました.
ライブラリも,名前は32と書いてありますが,OpenAL Softのフォルダの,openal-soft-1.22.0-bin\libs\Win64 においてあるものを利用しているので,ビット数の問題でもないのかなと考えています...
4. 原因として考えられるもの
メインのプログラムファイルの拡張子を.c→.cpp変えてしまったことが原因ではないかと考えています.
拡張子.cで提供されていたサンプルプログラム(altonegen.c)をコピペして,今回のサンプルを実行しようとしています.公式HPあたりを参考にしてみて,もとの拡張子が異なるため未解決のシンボルとなってしまうのかなと考えたのですが,初学者のため理解に苦戦しています...
該当のソースコード
エラー文にあった関数が定義されているalhelpers.hを記載しました.,test2.cpp(altonegen.c),al.hは文字数の都合で記載していません.お時間ございましたらこちらからダウンロードお願いいたします...
エラーに現れたInitAL(test2.cppコードの中盤くらいにある)などはalhelpers.hで定義されたものです.
alhelpers.h
C++
1/*alhelpers.h*/ 2#ifndef ALHELPERS_H 3#define ALHELPERS_H 4 5#include "al.h" 6 7#ifdef __cplusplus 8extern "C" { 9#endif 10 11/* Some helper functions to get the name from the format enums. */ 12const char *FormatName(ALenum type); 13 14/* Easy device init/deinit functions. InitAL returns 0 on success. */ 15int InitAL(char ***argv, int *argc); 16void CloseAL(void); 17 18/* Cross-platform timeget and sleep functions. */ 19int altime_get(void); 20void al_nssleep(unsigned long nsec); 21 22/* C doesn't allow casting between function and non-function pointer types, so 23 * with C99 we need to use a union to reinterpret the pointer type. Pre-C99 24 * still needs to use a normal cast and live with the warning (C++ is fine with 25 * a regular reinterpret_cast). 26 */ 27#if __STDC_VERSION__ >= 199901L 28#define FUNCTION_CAST(T, ptr) (union{void *p; T f;}){ptr}.f 29#elif defined(__cplusplus) 30#define FUNCTION_CAST(T, ptr) reinterpret_cast<T>(ptr) 31#else 32#define FUNCTION_CAST(T, ptr) (T)(ptr) 33#endif 34 35#ifdef __cplusplus 36} // extern "C" 37#endif 38 39#endif /* ALHELPERS_H */ 40
補足情報
どうかお力添えを頂けると幸いです...
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/19 08:16
2022/05/19 08:19
2022/05/19 08:34 編集