从Lua调用C代码

我尝试按照这个指南进行:http://www.troubleshooters.com/codecorn/lua/lua_lua_calls_c.htm

我按照指南尝试编译C代码:

gcc -Wall -shared -fPIC -o power.so -I/usr/include/lua5.1 -llua5.1 hellofunc.c

但是我得到了http://pastebin.com/KQvA0qFH的错误信息,我认为这是因为忘记包含库或框架而导致的错误,但我已经包含了-I/usr/include/lua5.1

如果有所区别,我是在os x上运行的,而我是用brew安装的lua。

点赞
用户5119903
用户5119903

但是我不能评论,所以不得不把它发布为答案 BUT

从错误信息来看,我猜测你需要使用-m32开关编译,以便构建32位库。

2016-05-11 13:26:16
用户54200
用户54200

你还没有告诉它 lua5.1 在哪里找到。

可以使用-L告诉编译器库的位置。

你的示例页面上说要查看 http://www.troubleshooters.com/codecorn/lua/lua_c_calls_lua.htm#_Anatomy_of_a_Lua_Call

2016-05-11 13:48:01
用户107090
用户107090

这对我很有帮助,但我不使用 homebrew。Lua 安装在 /usr/local 目录下。

% gcc -Wall -bundle -undefined dynamic_lookup -fPIC -o power.so hellofunc.c
% lua
Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> require"power"
> print(square(2))
Top of square(), nbr=2.000000
4
> print(cube(2))
Top of cube(), number=2.000000
8

注意编译行使用了 -bundle -undefined dynamic_lookup 而不是 -shared,以及 -llua5.1 的缺失。

通常情况下,我们不应将 Lua 核心库链接到这样的动态库中。

2016-05-11 13:48:33