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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Visual Studio

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

C++

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

解決済

OpenAL softのサンプルプログラムのビルド時にLNK2019が生じる

KeiyaShimizu
KEI

総合スコア7

Visual Studio

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

C++

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

2回答

0評価

0クリップ

221閲覧

投稿2022/05/19 04:45

実現したいことと問題

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を指定したりしましたが,うまくいきません.

teratail 参考①
teratail 参考②

プラットフォームはx64でデバッグを行いました.

ライブラリも,名前は32と書いてありますが,OpenAL Softのフォルダの,openal-soft-1.22.0-bin\libs\Win64 においてあるものを利用しているので,ビット数の問題でもないのかなと考えています...

4. 原因として考えられるもの
メインのプログラムファイルの拡張子を.c→.cpp変えてしまったことが原因ではないかと考えています.
拡張子.cで提供されていたサンプルプログラム(altonegen.c)をコピペして,今回のサンプルを実行しようとしています.公式HPあたりを参考にしてみて,もとの拡張子が異なるため未解決のシンボルとなってしまうのかなと考えたのですが,初学者のため理解に苦戦しています...

Microsoft Build

該当のソースコード

エラー文にあった関数が定義されているalhelpers.hを記載しました.,test2.cpp(altonegen.c),al.hは文字数の都合で記載していません.お時間ございましたらこちらからダウンロードお願いいたします...

OpeaAL Soft->Download

エラーに現れたInitAL(test2.cppコードの中盤くらいにある)などはalhelpers.hで定義されたものです.

alhelpers.h

C++

/*alhelpers.h*/ #ifndef ALHELPERS_H #define ALHELPERS_H #include "al.h" #ifdef __cplusplus extern "C" { #endif /* Some helper functions to get the name from the format enums. */ const char *FormatName(ALenum type); /* Easy device init/deinit functions. InitAL returns 0 on success. */ int InitAL(char ***argv, int *argc); void CloseAL(void); /* Cross-platform timeget and sleep functions. */ int altime_get(void); void al_nssleep(unsigned long nsec); /* C doesn't allow casting between function and non-function pointer types, so * with C99 we need to use a union to reinterpret the pointer type. Pre-C99 * still needs to use a normal cast and live with the warning (C++ is fine with * a regular reinterpret_cast). */ #if __STDC_VERSION__ >= 199901L #define FUNCTION_CAST(T, ptr) (union{void *p; T f;}){ptr}.f #elif defined(__cplusplus) #define FUNCTION_CAST(T, ptr) reinterpret_cast<T>(ptr) #else #define FUNCTION_CAST(T, ptr) (T)(ptr) #endif #ifdef __cplusplus } // extern "C" #endif #endif /* ALHELPERS_H */

補足情報

どうかお力添えを頂けると幸いです...

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

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

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Visual Studio

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

C++

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