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

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

ただいまの
回答率

90.47%

  • C

    4657questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • C++

    4522questions

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

  • DXライブラリ

    72questions

    DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

  • Lua

    59questions

    Luaは、汎用のスクリプト言語の一つで、 移植性が高く、高速な実行速度などの特徴を持ち 手続き型・オブジェクト指向言語としても利用可能で 関数型言語、データ駆動型の要素も併せ持っている言語です。

DXライブラリを使ったゲームにLuaを組み込む

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 1,815

yaeyama

score 49

前提・実現したいこと

DXライブラリを使ったゲーム開発で、Luaを使いたいと思い、
とりあえずtest.luaから変数valの値を取得して表示しようとしたのですが、
何かを二重定義しているみたいでエラーになってしまいます。

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

1>------ ビルド開始: プロジェクト:LuaDXTest, 構成:Debug Win32 ------
1>  main.cpp
1>  LuaLib.lib(lstate.obj) : MSIL .netmodule または /GL を伴ってコンパイルされたモジュールが見つかりました。/LTCG を使用して再開始してください。リンカーのパフォーマンスを向上させるためには、コマンドラインに /LTCG を追加してください。
1>LINK : warning LNK4075: /INCREMENTAL は /LTCG の指定によって無視されます。
1>main.obj : warning LNK4075: /EDITANDCONTINUE は /OPT:LBR の指定によって無視されます。
1>MSVCRT.lib(MSVCR120.dll) : error LNK2005: _strncmp は既に LIBCMTD.lib(strncmp.obj) で定義されています。
1>MSVCRT.lib(MSVCR120.dll) : error LNK2005: _strchr は既に LIBCMTD.lib(strchr.obj) で定義されています。
1>MSVCRT.lib(MSVCR120.dll) : error LNK2005: _longjmp は既に LIBCMTD.lib(longjmp.obj) で定義されています。
1>LINK : warning LNK4098: defaultlib 'MSVCRT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
1>C:\Users\xxx\Desktop\LuaDXTest\Debug\LuaDXTest.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

該当のソースコード

#include <DxLib.h>
#include "lua.hpp"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
    SetDoubleStartValidFlag(TRUE);
    //SetOutApplicationLogValidFlag(false);        //ログ出力しない
    ChangeWindowMode(TRUE);
    DxLib_Init();
    SetDrawScreen(DX_SCREEN_BACK);
    SetWindowSizeChangeEnableFlag(true);        //ウィンドウサイズを自由に変更できる
    SetAlwaysRunFlag(TRUE);                        //ウィンドウがノンアクティブでも実行

    int val=0;

    lua_State *L = luaL_newstate();

    // Luaファイルを開いて読み込み
    if (luaL_dofile(L, "test.lua")) {
        printf("%s\n", lua_tostring(L, lua_gettop(L)));
        lua_close(L);
        return 0;
    }

    lua_getglobal(L, "val");

    val = (int)lua_tonumber(L, 1);

    lua_pop(L, lua_gettop(L));

    lua_close(L);

    // while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キー更新)
    while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0){

        DrawFormatString(0, 0, GetColor(255, 255, 255), "%d", val);

    }

    DxLib_End(); // DXライブラリ終了処理
    return 0;
}

test.luaは下の一行のみです。

val = 10

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

VC2013
Luaは5.3.2です

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

LuaLib.libはどのように作成しましたか?
エラー内容からはLuaLib.libはReleaseでビルドしたものを使用していて、それをDebugビルドしたプログラムに組み込んでいるため発生しているように推測されます。
よって、Debugビルド時はDebugビルドで作成したLuaLib.libを、Releaseビルド時はReleaseビルドで作成したLuaLib.libをリンクすることによって解決するものと思われます。

ここからは余談ですが
私はプロジェクトのターゲット毎のビルドの設定を行うよりLuaをビルドするほうが簡単なので、
Luaのスタティックライブラリを作成するプロジェクトを作成してそれを参照するようにしています。

Luaのビルドはソースディレクトリにあるlua.cとluac.c以外のソースコードをビルドすればよいだけです。
スタティックライブラリのプロジェクトの作成方法は以下を参考にしてください。
https://msdn.microsoft.com/ja-jp/library/ms235627(v=vs.120).aspx

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/06/10 16:44

    張っていただいたリンクのやり方通りにプロジェクトを作った後
    プロジェクトのプロパティ->Debug->c/c++->コード生成->ランタイムライブラリをマルチスレッドデバッグ(/MTD)に
    Releaseにして先程と同じ項目をマルチスレッド(/MT)にしてビルドしたものを使ったらうまくいきました。
    ありがとうございました。

    キャンセル

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

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

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

  • C

    4657questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • C++

    4522questions

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

  • DXライブラリ

    72questions

    DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

  • Lua

    59questions

    Luaは、汎用のスクリプト言語の一つで、 移植性が高く、高速な実行速度などの特徴を持ち 手続き型・オブジェクト指向言語としても利用可能で 関数型言語、データ駆動型の要素も併せ持っている言語です。