Сборка DLL для использования с Mozilla js-ctypes - PullRequest
1 голос
/ 19 февраля 2012

В отношении моего первого поста: Mozilla использует C DLL с js-ctypes

Я пытаюсь собрать DLL для использования из расширения Mozilla Firefox. Я создал небольшой код на C и скомпилировал его с помощью GCC.

Вот код C:

#include<stdio.h>
int add(int a,int b)
{
    return(a+b);
}

Вот строки компиляции:

gcc -c library.c
gcc -shared -o library.dll library.o -Wl

DLL хорошо скомпилирована, я могу открыть ее с помощью dllexp и увидеть раскрытый метод add ().

Проблема в том, что, когда я пытаюсь использовать его из своего расширения, я всегда получаю сообщение: Ошибка: не удалось открыть библиотеку

Вот мой вызов Javascript:

var libc = ctypes.open("C:\\WINDOWS\\system32\\user32.dll"); //OK
var libc2 = ctypes.open("C:\\WINDOWS\\system32\\library.dll"); //KO

Кажется, DLL не может быть открыта Firefox, но мне интересно, почему. Я ничего не вижу в сборке DLL для расширения Firefox, похоже, мы можем использовать все классические библиотеки DLL.

Есть идеи? Спасибо

1 Ответ

1 голос
/ 21 февраля 2012

Если вы скомпилируете библиотеку таким образом, вы получите зависимость от msvcrt.dll, которая, вероятно, не может быть разрешена в вашей системе ( требуется распространяемый пакет ), на моем это работает нормально.Вы можете скомпилировать вашу библиотеку без зависимости от CRT, вам просто нужно определить DllMain самостоятельно:

#include<windows.h>

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
  return TRUE;
}

int add(int a,int b)
{
    return(a+b);
}

И шаг ссылки выглядит так:

gcc -shared -nostdlib -o library.dll library.o -Wl,-e_DllMain@12

Вы не можететогда используйте функциональность CRT - я не смог найти способ статической компиляции среды выполнения с помощью GCC в Windows (с другой стороны, Visual C ++ справляется с этим отлично).

...