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

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

ただいまの
回答率

88.10%

C++へのLuaシステム実装に関して

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,727

score 28

前提・実現したいこと

初めまして。
C++&DXライブラリ環境にLuaスクリプトシステムを実装しようとしているのですが
以下のエラーが解決できず質問させて頂きました

ご教授の程、何卒宜しくお願いします

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

エラー    1    error LNK2019: 未解決の外部シンボル _luaL_openlibs が関数 "bool cdecl advLua_FileLoad(char *)" (?advLua_FileLoad@@YA_NPAD@Z) で参照されました。    D:\project\Application\PC_01\project\LuaScript.obj    PC_01
エラー    2    error LNK2019: 未解決の外部シンボル _luaL_loadfilex が関数 "bool 
cdecl advLua_FileLoad(char *)" (?advLua_FileLoad@@YA_NPAD@Z) で参照されました。    D:\project\Application\PC_01\project\LuaScript.obj    PC_01
エラー    3    error LNK2019: 未解決の外部シンボル _luaL_newstate が関数 "bool __cdecl advLua_FileLoad(char *)" (?advLua_FileLoad@@YA_NPAD@Z) で参照されました。    D:\project\Application\PC_01\project\LuaScript.obj    PC_01
エラー    4    error LNK1120: 3 件の未解決の外部参照    D:\project\Application\PC_01\bin\Debug\PC_01.exe    PC_01

該当のソースコード

(#)include    <lua.hpp>
typedef struct    ADV_LUA_SCRIPT
{
/*    @param    初期化済み?
*/
bool                  bIsInit_;
/*    @param    
*/
int                    nCase_;
/*    @param    Lua管理ハンドル
*/
lua_State *        pLuaHandle_;

} *LPADV_LUA_SCRIPT;

static ADV_LUA_SCRIPT *        g_pLuaData    = NULL;

//==================================================//
/*
Luaスクリプトファイル読み込み
*/
//==================================================//
inline bool        advLua_FileLoad( char * szScript )
{
//    メモリ確保
g_pLuaData    = ( ADV_LUA_SCRIPT*)malloc( sizeof( ADV_LUA_SCRIPT ) );
if( g_pLuaData == NULL )
{
}

ADV_LUA_SCRIPT *    pLua_ = g_pLuaData;
if( pLua_ == NULL ){ return( false ); }
//    Luaライブラリの開始
pLua_->pLuaHandle_ = luaL_newstate();
if( pLua_->pLuaHandle_ != NULL )
{
//    Lua の標準ライブラリ関数を使えるようにする
luaL_openlibs( pLua_->pLuaHandle_ );
}
//    Luaスクリプトファイルの読み込み
int    nResult = 0;
nResult = luaL_loadfilex( pLua_->pLuaHandle_, szScript, NULL );
if( nResult < 0 )
{
//    Error
return( false );
}
return( true );
}
bool    advLua_ScriptLoad( int    nIndex, int nFileIndex )
{
//    ファイルパスを取得
char    szFilePath[ 256] = "";

//    実読み込み
bool    bData    = false;
bData    =    advLua_FileLoad( "project/Lua/Sample.lua");
if( bData )
{
//    成功:読み込めた
return( true );
}
//    読み込み失敗
return( false );
}

試したこと

ソリューションのプロパティの以下の設定は行ってあります
・C/C++ → 追加のインクルードディレクトリ → ”Luaのインクルードフォルダのパス”
・リンカ → 全般 → 追加のライブラリディレクトリ → ”libファイルの置いているパス(Lua52.lib)”
・リンカ → 入力 → 追加の依存ファイル → "Luaのlibファイル名(Lua52.lib)”

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

Windows7 64bit
Visual Studio2013
DXライブラリ:DxLib_VC3_16f
Luaバージョン:lua-5.2.3_Win64_vc12_lib
https://ja.osdn.net/projects/sfnet_luabinaries/releases/#

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

こんにちは。

「LNK2019:  _luaL_openlibs 」で検索すると、こんなQAがでてきました。
64ビットビルドされたLua52.libを32ビット・ビルドしたアプリへリンクしようとして同じエラーがでているようです。
アプリを64ビット・ビルドしているか確認してみてください。
Visual C++ プロジェクトを 64 ビット プラットフォーム用に設定するに手順が書かれてます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/29 20:08 編集

    教えて頂いた点を確認したところ、仰る通りアプリケーションは32ビットで64ビットビルドされていませんでした。
    そもそも32ビットと言うことを忘れ64ビット用ライブラリを使用している根本のミスに気づきませんでした
    64ビットビルドを行う方法と32ビット用のLuaライブラリを使用する2方法で解決する事を確認しました
    教えて頂きありがとうございました

    キャンセル

0

https://www.lua.org/manual/5.2/readme.html#other
に書いてあるように、あなたのプロジェクトに
Luaのソースの中から library:に書かれているソースをすべてコンパイル対象として追加するのが手っ取り早いかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/29 20:15

    ドキュメントは見ていなかったのでその方法は知りませんでした
    早速試してみたいと思います
    教えて頂きありがとうございました

    キャンセル

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

  • ただいまの回答率 88.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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