【发布时间】:2015-04-04 00:50:05
【问题描述】:
我正在尝试在 macosx 上创建可用作 lua 扩展的动态库。
这是我的生成文件:
SOURCES= src/lsignal.cpp
OBJ= lsignal.o
CC= clang++
LUA_PATH= third_party/lua-5.2.3/src
LUA_INCLUDE= -I include -I $(LUA_PATH)
LUA_LIB= -L $(LUA_PATH) -llua
# linux
CFLAGS_LINUX= -fPIC
# macosx
CFLAGS_MACOSX=
# linux
LFLAGS_LINUX= -shared
# macosx
LFLAGS_MACOSX= -bundle -undefined dynamic_lookup
# target
TARGET= lsignal.so
# placeholder
CFLAGS= -Wall -I include -I $(LUA_PATH) -c
LFLAGS= $(LUA_LIB)
# ho-lee-sheet they have if statements and os checks
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
CFLAGS+=$(CFLAGS_MACOSX)
LFLAGS+=$(LFLAGS_MACOSX)
else
CFLAGS+=$(CFLAGS_LINUX)
LFLAGS+=$(LFLAGS_LINUX)
endif
.PHONY: debug
debug: CFLAGS+=-DDEBUG
debug: all
.PHONY: release
release: CFLAGS+=-O2
release: all
all: lsignal
@echo "LFLAGS: $(LFLAGS)"
$(CC) $(LFLAGS) -o $(TARGET) $(OBJ)
lsignal:
@echo "CFLAGS: $(CFLAGS)"
$(CC) $(CFLAGS) $(SOURCES)
clean:
rm -f $(OBJ) $(TARGET)
我正在使用 Luiz Henrique 在他的page 上推荐的建议标志。
尽管如此,我仍然看到错误:
lua: multiple Lua VMs detected
stack traceback:
[C]: in ?
[C]: in function 'require'
test.lua:4: in main chunk
[C]: in ?
lua(52879,0x7fff746ad300) malloc: *** error for object 0x10aa02938: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
zsh: abort lua test.lua
我是否缺少链接某处的标志?我看到了一篇关于“-Wl”和“-E”的帖子,但我都试过了,但都没有运气。
编辑:我正在尝试像这样在 lua 中使用这个共享库:
#!/usr/bin/env lua
-- for osx
package.cpath = package.cpath .. ";?.dylib"
local signal = require "lsignal"
print(signal.SIGABRT)
【问题讨论】:
-
lua 模块不应链接到 lua 本身。宿主应用程序应该有 lua 链接。
-
应删除哪些标志以在 lua 脚本中使用它?
-
-llua标志正在链接到 lua 库。