C++ (関数型) lua 拡張機能を静的ライブラリとしてホスト C++ プログラムにバインドしようとしています。
最小限のプログラムを作成して、正常に動作するかどうかを確認しました。私は現在、このコードを持っています:
main.cpp :
#include "util.h"
int main()
{
lua_State* L;
startLua(L);//after the call to this is gets the segfault
luaL_dofile(L,"test.lua");
}
util.h :
#ifndef _UTIL_FILE_INCLUDED_
#define _UTIL_FILE_INCLUDED_
extern "C" {
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
}
//functions
int startLua(lua_State* start);
#endif
ユーティリティ.cpp:
#include "util.h"
int startLua(lua_State* start)
{
//program never gets here
start = lua_open();
luaL_openlibs(start);
return 0;
}
メイクファイル:
CC=g++
CFLAGS=-c -Wall -fpermissive
LFLAGS=-llua
all: util.a main.o
$(CC) $(LFLAGS) main.o util.a -o main
util.a: util.o util.h
ar -cvq util.a util.o
util.o: util.cpp util.h
$(CC) $(CFLAGS) util.cpp
main.o: main.cpp util.h
$(CC) $(CFLAGS) main.cpp
clean:
rm *.o *.a
また、ヘッダーから L の定義を解除し、純粋に main() 内で定義しようとしましたが、同じ結果になりました。
コンパイル中に表示される唯一の警告は、「L is defined but not used」または「L is used uninitialized」です。
実行時に、すぐにセグメンテーション違反が発生します。
私はライブラリを頻繁に使用するわけではないので、そこに問題がある可能性があります。その場合、これは簡単な質問です。
必要に応じて、gcc 4.7.2、lua 5.1.5、および Arch Linux (更新済み) を使用します。
編集: GDB によると、問題はここにあります: プログラムが信号 SIGSEGV を受信しました。セグメンテーション違反です。/usr/lib/liblua.so.5.1 からの lua_gettop () の 0x00007ffff7bb6390
lua で問題が発生したことはありませんが、静的ライブラリにコンパイルするのが間違いである可能性はありますか?