c - 尝试从 js-ctypes 调用 pam_start 时出现 undefined symbol

标签 c xulrunner jsctypes

最近爱上了 js-ctypes(对于编写需要访问某些底层操作系统功能的小型应用程序来说非常方便),我尝试将它们用于一个小型登录管理器原型(prototype),我想在其中公开 PAM .

为此,我一直在遵循 GNU/Linux 显示管理器教程,编译在其 Github ^1 中找到的 pam.c 文件。存储库并从我的 JavaScript 代码调用 login(const char *username, const char *password, pid_t *child_pid)

我使用以下命令来编译该库:

  • gcc -fPIC -c pam.c
  • gcc -shared -o pam.so pam.o

javascript调用代码如下(user和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);
}

不幸的是,当运行应用程序并调用此函数时,应用程序退出并显示以下错误消息

符号查找错误:/login-manager/chrome/content/lib/pam.so: undefined symbol :pam_start

pam_start 是在本教程提供的 pam.c/pam.h 范围之外定义的。它的定义可以在 /usr/lib/security/pam_appl.h 中找到。我怎样才能缓解这个事实并创建一个共享对象,让我正确调用作为原始教程的一部分提供的 login()logout() 函数 ^2

最佳答案

大约一个月前修复了它。结果发现是链接问题。以下是如何针对 libpam 正确编译它。

gcc -fPIC -c DM.c
gcc -shared -o DM.so DM.o -lpam

关于c - 尝试从 js-ctypes 调用 pam_start 时出现 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37766408/

相关文章:

firefox-addon - 在 xulrunner 中运行 Firefox 扩展

c - 在 Visual Studio 中制作适合 Mozilla 中的 js-ctypes 使用的 C DLL

c - 使 gcc/clang 将函数识别为内置函数

c - 在 C 语言中,如何获得带前导零的整数?

c - 使用 read() 获取用户输入而不是 scanf

graphics - 构建轻量级跨平台文本编辑器的方法

c++ - a+(-a) 操作期间溢出

c# - Windows 窗体关闭时出现 “Unresponsive Script"

javascript - 用 javascript 编写的 FD_SET 和 FD_ISSET 宏

c++ - 设置 Windows 问题的图标(WinXP 和 Win7)