构建供 Mozilla js-ctypes 使用的 DLL
参考我的第一篇文章: Mozilla 使用带有 js-ctypes 的 C DLL
我正在尝试构建一个 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
Firefox 似乎无法打开 DLL,但我想知道为什么。我没有看到任何关于为 Firefox 扩展构建 DLL 的内容,似乎我们可以使用每个经典的 DLL 库。
有什么想法吗?谢谢
In reference to my first post: Mozilla use a C DLL with js-ctypes
I'm trying to build a DLL to be used from a Mozilla Firefox extension. I created a little C code and compiled it with GCC.
Here is the C code :
#include<stdio.h>
int add(int a,int b)
{
return(a+b);
}
Here are the compilation lines:
gcc -c library.c
gcc -shared -o library.dll library.o -Wl
The DLL is well compiled, I can open it with dllexp and can see the add() method exposed.
The problem is, when I try to use it from my extension, I always get the message: Error: couldn't open library
Here is my Javascript call:
var libc = ctypes.open("C:\\WINDOWS\\system32\\user32.dll"); //OK
var libc2 = ctypes.open("C:\\WINDOWS\\system32\\library.dll"); //KO
It seems the DLL cannot be opened by Firefox, but I wonder why. I don't see anything about building DLL for Firefox extension, it seems we can use every classic DLL library.
Any idea? Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您像这样编译库,您将获得对
msvcrt.dll
的依赖,这可能无法在您的系统上解析(需要可再发行包),在我的上它工作正常。您可以在不依赖于 CRT 的情况下编译您的库,您只需自己定义 DllMain:链接步骤如下所示: 那么
您无法使用 CRT 功能 - 我找不到方法在 Windows 上使用 GCC 静态编译运行时(另一方面 Visual C++ 就可以了)。
If you compile the library like that you get a dependency on
msvcrt.dll
which probably cannot be resolved on your system (redistributable package required), on mine it works fine. You can compile your library without the dependency on the CRT, you just have to defineDllMain
yourself:And the link step looks like this:
You cannot use CRT functionality then - I couldn't find a way to compile the runtime statically with GCC on Windows (Visual C++ on the other hand does it just fine).