c - 有没有可能用C写的程序下载一个外部函数,把这个外部函数当作一个编译链接的共享对象?

标签 c function

我正在用 C 编写一个程序,但我在使用 libconfig.h 时遇到了问题。因此,我认为如果我的程序可以从 Internet 下载一个外部函数(使用 libcurl.h),并将其作为一个已编译和链接的共享对象来处理,那将是完美的。它需要在所有桌面平台(Windows、Mac 和 Linux)上运行,因此没有 .dll,并且必须由程序下载,作为一个函数处理,然后被程序删除。所以,我的问题是:这在 C 中可能吗?

之所以需要单独下载是因为功能需要定期更新,要求用户定期下载新版本的程序会违背程序的目的。

最佳答案

嗯,最接近你要求的是这个

  1. 使用 curl 下载 .so/.dll
  2. 将 .so/.dll 动态加载到您的进程中
  3. 在您的进程中设置函数指针以指向 .so/.dll 中的函数

Windows 上:

HMODULE handle = LoadLibrary("mylib.dll");
if (handle)
    myfunc = GetProcAddress(handle, "myfunc");

卸载调用

FreeLibrary(handle)

它减少引用计数,当引用计数达到 0 时,DLL 实际上被卸载。

Linux 上,查看这篇文章: How do I load a shared object in C++?

关于c - 有没有可能用C写的程序下载一个外部函数,把这个外部函数当作一个编译链接的共享对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21915299/

相关文章:

ruby - ROR 代码发送许多邮件

c - 在函数原型(prototype)中的 char * param 中添加/*const*/而不是 const 限定符

c# - 如何使 C# 函数参数充当值?

ios - 调用另一个类的函数(协议(protocol))

c++ - 使用 C 库的面向对象应用程序的方法

c - 如何优化这段代码?

c - C语言中如何将两个8位数据排列成一个16位数据?

c - 如何仅使用单个端口减少 UDP 套接字通信中的消息丢失?

r - 使用 R 中的 apply 系列将 2 列数据框的每一行传递给我创建的函数?

c - 从一台服务器监听多个端口