最近我爱上了js-ctype(对于编写需要访问一些底层OS功能的小型应用程序非常方便),我正尝试将它们用于一个小型登录管理器原型,在这里我想公开PAM。
为此,我一直在学习GNU/Linux教程,编译在其^1存储库中找到的pam.c文件,并从我的javascript代码中调用login(const char *username, const char *password, pid_t *child_pid)。
我使用以下命令编译库:
javascript调用代码如下(用户和pw是XUL中定义的两个文本框):
function login(user, pw) {
var {ctypes} = Components.utils.import("resource://gre/modules/ctypes.jsm", null);
Components.utils.import("resource://gre/modules/Services.jsm");
var cr = Components.classes['@mozilla.org/chrome/chrome-registry;1'].getService(Components.interfaces.nsIChromeRegistry);
var chromeURI_myLib = Services.io.newURI('chrome://app/content/lib/pam.so', 'UTF-8', null);
var localFile_myLib = cr.convertChromeURL(chromeURI_myLib);
var jarPath_myLib = localFile_myLib.spec;
var filePath_myLib = localFile_myLib.path;
var libc = ctypes.open(filePath_myLib);
/* Import a function */
var loginFunc = libc.declare("login", /* function name */
ctypes.default_abi, /* call ABI */
ctypes.int,
ctypes.char.ptr,
ctypes.char.ptr);
loginFunc(user, pw);
}不幸的是,当运行应用程序并调用此函数时,应用程序使用以下错误消息退出
symbol lookup error: /login-manager/chrome/content/lib/pam.so: undefined symbol: pam_start
pam_start是在本教程提供的pan.c/amam.h的范围之外定义的。它的定义可以在/usr/lib/security/pam_appl.h中找到。如何减轻这一事实,并创建一个共享对象,使我能够正确地调用作为原始教程login()的一部分提供的logout()和^2函数
发布于 2016-07-20 01:27:54
一个月前就修好了。原来是个连接问题。下面是如何针对libpam正确地编译它。
gcc -fPIC -c DM.c
gcc -shared -o DM.so DM.o -lpamhttps://stackoverflow.com/questions/37766408
复制相似问题