LuaをCに埋め込み

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

LuaをCに埋め込み

#1

投稿記事 by rozeo » 11年前

こんばんは、rozeoです。

Luaをやってみようとしなのですが、なぜかリンクエラーが出ます。
プログラムとスクリプト、エラーログは以下のとおりです

コード:

//Cpp
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include <stdio.h>

int main(void) {
    // Luaステートオブジェクトの作成
    lua_State *L = lua_open();
    // Luaの標準ライブラリを読み込む
    luaL_openlibs(L);
    // Luaスクリプトを読み込む
    luaL_dofile(L,"sample.lua");
	printf("C言語とLuaの結合 C言語からの出力");
    // Luaステートオブジェクトを閉じる
    lua_close(L);

    return 0;
}
print("C言語とLuaの結合 LuaScriptからの出力");

エラーログ

コード:

  main.cpp
main.obj : error LNK2019: 未解決の外部シンボル "void __cdecl lua_close(struct lua_State *)" (?lua_close@@YAXPAUlua_State@@@Z) が関数 _main で参照されました。
main.obj : error LNK2019: 未解決の外部シンボル "int __cdecl lua_pcall(struct lua_State *,int,int,int)" (?lua_pcall@@YAHPAUlua_State@@HHH@Z) が関数 _main で参照されました。
main.obj : error LNK2019: 未解決の外部シンボル "int __cdecl luaL_loadfile(struct lua_State *,char const *)" (?luaL_loadfile@@YAHPAUlua_State@@PBD@Z) が関数 _main で参照されました。
main.obj : error LNK2019: 未解決の外部シンボル "void __cdecl luaL_openlibs(struct lua_State *)" (?luaL_openlibs@@YAXPAUlua_State@@@Z) が関数 _main で参照されました。
main.obj : error LNK2019: 未解決の外部シンボル "struct lua_State * __cdecl luaL_newstate(void)" (?luaL_newstate@@YAPAUlua_State@@XZ) が関数 _main で参照されました。
c:\documents and settings\ken-dai\my documents\visual studio 2010\Projects\LuaTest\Debug\LuaTest.exe : fatal error LNK1120: 外部参照 5 が未解決です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
追加のライブラリ、インクルードファイルの登録はしています
またsample.luaも同じ階層に入れています。
なぜなのか教えていただけると幸いです。

rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

Re: LuaをCに埋め込み

#2

投稿記事 by rozeo » 11年前

P.S.

以下のサイトを参考にしています。
http://starcode.web.fc2.com/

Luaのバージョン 5.1

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: LuaをCに埋め込み

#3

投稿記事 by softya(ソフト屋) » 11年前

リンクに失敗しているようです。
追加のライブラリにミスが有る可能性が高いですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

Re: LuaをCに埋め込み

#4

投稿記事 by rozeo » 11年前

もう一度インストールしなおして追加しなおしても変わりません。
ライブラリのリンクがうまく言ってないのかと思い、
#pragma comment(lib,"");
でやってみましたがかわりませんでした。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: LuaをCに埋め込み

#5

投稿記事 by softya(ソフト屋) » 11年前

追加のライブラリにluaのライブラリはちゃんと指定されているのでしょうか?
どう書いているのか教えてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

Re: LuaをCに埋め込み

#6

投稿記事 by rozeo » 11年前

luaのライブラリは既存設定の
C:\program files\lua\5.1\lib
を指定しています。
中にはlua5.1.lib,lua5.1.dll,lua51.lib,lua51.dllがあります。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: LuaをCに埋め込み

#7

投稿記事 by softya(ソフト屋) » 11年前

64bitOSの場合はC:\Program Files (x86)\Lua\5.1\libとなりますが、それは問題ないでしょうか?
もし問題ないなら、
#pragma comment(lib,"lua5.1.lib");
をヘッダ・インクルードの後に書き加えてみて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

Re: LuaをCに埋め込み

#8

投稿記事 by rozeo » 11年前

使ってるPCはXPなので32bitです。

また
#pragma comment(lib,"lua5.1.lib");
#pragma comment(lib,"lua5.1.dll");
#pragma comment(lib,"lua51.lib");
#pragma comment(lib,"lua51.dll");
とすべて記述しましたが、newlineがどうとかっていうwarningが増えただけでLNK errorは変わりませんでした。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: LuaをCに埋め込み

#9

投稿記事 by softya(ソフト屋) » 11年前

何となく原因が分かりました。
プログラムがC++としてコンパイルされているのが原因だと思います。
完全にC++のコードに切り替えるか、C言語としてコンパイル(ファイルの拡張子を.cとするか/TCを指定)すれば問題はなくなると思います。
あと#pragmaのあとのセミコロンは不要でした。失礼しました。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

Re: LuaをCに埋め込み

#10

投稿記事 by rozeo » 11年前

拡張子を.cにかえて
#pragma comment(lib,"lua5.1.lib");
#pragma comment(lib,"lua51.lib");
を記述するとできました。

しかし、拡張子を.cに変えるということはC++に含まれるclassだったり
こんな記述

コード:

for(int a = 0;a < 4;a++){
...
}
はできないということですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: LuaをCに埋め込み

#11

投稿記事 by softya(ソフト屋) » 11年前

> はできないということですか?
そういう事です。

調べてみましたが
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
をやめて代わりに
#include "lua.hpp"
を使えばC++からアクセスできるように成るみたいです。
試してみて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

Re: LuaをCに埋め込み

#12

投稿記事 by rozeo » 11年前

lua.hppをインクルードしたら同時にclassの使用ができました!
でもやはり
#pragma comment(lib,"lua5.1.lib");
#pragma comment(lib,"lua51.lib");
を記述する必要があるようですね...

わざわざしらべてまでいただきありがとうございましたm(__)m

閉鎖

“C言語何でも質問掲示板” へ戻る