Mac下编译Lua引用的C共享库失败, 求解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mac下编译Lua引用的C共享库失败, 求解相关的知识,希望对你有一定的参考价值。

#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include <stdio.h>
static int myCfunc ( lua_State *L)

printf ("Roses are Red\n");
return 0;

int luaopen_fromlua(lua_State *L)

static const luaL_Reg Map[] = "dothis", myCfunc, NULL,NULL ;
luaL_register(L, "cstuff", Map);
return 1;

Mac 10.7.5下编译出错
我先试了这个:
william:Desktop william$ gcc -o example.so -I /usr/local/include -L /usr/local/lib -fpic -shared test.c -llua -Wall
test.c: In function ‘main’:
test.c:43: warning: implicit declaration of function ‘lua_open’
test.c:43: warning: assignment makes pointer from integer without a cast
Undefined symbols for architecture x86_64:
"_lua_open", referenced from:
_main in cczPGNkR.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
william:Desktop william$
然后也试了这个:
william:Desktop william$ g++ -o example.so -L/usr/local/lib -I/usr/local/include test.c -llualib
test.c: In function ‘int luaopen_fromlua(lua_State*)’:
test.c:18: error: ‘luaL_register’ was not declared in this scope
william:Desktop william$
结果都失败了, 求解
我的环境:
william:Desktop william$ lua -v
Lua 5.2.2 Copyright (C) 1994-2013 Lua.org, PUC-Rio
william:Desktop william$
william:Desktop william$ locate lua
/usr/local/Library/Formula/lua.rb
/usr/local/Library/Formula/luajit.rb
/usr/local/Library/Formula/luarocks.rb
/usr/local/Library/Formula/metalua.rb
/usr/local/bin/lua
/usr/local/bin/luac
/usr/local/include/lua.h
/usr/local/include/lua.hpp
/usr/local/include/luaconf.h
/usr/local/include/lualib.h
/usr/local/lib/liblua.a
/usr/local/lib/lua
/usr/local/lib/lua/5.2
/usr/local/man/man1/lua.1
/usr/local/man/man1/luac.1
/usr/local/share/lua
/usr/local/share/lua/5.2
/usr/share/file/magic/lua

参考技术A 1.没有创建Lua_State
2.打开库文件

如何在没有Android Studio的情况下编译JNI共享库,并在[关闭]中编译依赖项

我想创建一个使用libc函数的JNI共享库,而不必依赖Android Studio

我能够使用我在android ndk中找到的jni.h头来构建和加载共享库,并导出JNI_OnLoad函数

但是当我使用libc函数时,它会将libc库链接到目标android设备中不存在的路径

libtest.so链接到/lib32/libc.so.6但在android设备中libc的路径是/system/lib/libc.so

那么如何才能正确地将我的库链接到目标设备中的libc路径,或者如何在我的共享库中打包依赖项

PS:我正在使用ubuntu 18,gcc和一个简单的makefile,谢谢!

答案

你应该使用ndk-build来编译jni源代码。它可以从ant调用

以上是关于Mac下编译Lua引用的C共享库失败, 求解的主要内容,如果未能解决你的问题,请参考以下文章

Windows下编译mxnet

加载共享库 libpng16 时出错

linux ubantu下编译node source code

GCC 配置文件引导优化与共享库,无法控制可执行文件

对MSVS下编译ARPACK数学库的一点补充说明

MAC OS下编译apple跨平台的libevent库 (可延申到其它第三库)