我有一個名爲「test.so」的庫,它使用來自兩個相互引用的庫的函數。如果我在C程序中調用test.so的函數,它工作得很好,所以我假設在C函數中沒有錯誤。從Lua調用時未定義的符號
但是,當我從Lua調用它時,由於「未定義符號」,它會引發Seg Fault錯誤。問題是,符號被定義,當我運行nm test.so時,我可以看到它。
閱讀下面
Lua: C++ modules can't reference eachother, undefined symbol
線程我試圖創建一個新的模塊,將通過描述瑞納加載test.so使用dlopen,。
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
#include <stdio.h>
#include <dlfcn.h>
int luaopen_drmaa(lua_State *L){
printf("Chamou luaopen_test\n");
if(dlopen("/home/erica/Downloads/test.so", RTLD_NOW | RTLD_GLOBAL) == NULL)
printf("%s\n", dlerror());
else
printf("Chamou dlopen e teve retorno nao null\n");
return 0;
}
我編譯它:
gcc -g drmaa_lib.c -shared -fpic -I /usr/include/lua5.1 -I /usr/local/include/ -L /usr/local/lib/m -llua5.1 -o drmaa.so
但是當我跑,我得到:
$ lua5.1
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
> require "drmaa"
Chamou luaopen_test
Chamou dlopen e teve retorno nao null
> submitJob()
stdin:1: attempt to call global 'submitJob' (a nil value)
stack traceback:
stdin:1: in main chunk
[C]: ?
然後,我在主函數試圖插入
luaopen_test(L);
及以上主要功能
extern int luaopen_test(lua_State *L);
實際打開的lib,但我得到這個錯誤:
$ lua5.1
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
> require "drmaa"
error loading module 'drmaa' from file './drmaa.so':
./drmaa.so: undefined symbol: luaopen_test
stack traceback:
[C]: ?
[C]: in function 'require'
stdin:1: in main chunk
[C]: ?
引用的問題筆者不顯示解決方案的開發細節。 有沒有人有什麼可能使其工作的線索?
在此先感謝。