我有一个用 C 编写的服务器和客户端。我尝试在服务器中加载共享库,然后将库函数指针传递给客户端。这样我就可以更改库而无需编译客户端。
由于每个进程都有自己独立的内存空间,我想知道是否可以在共享内存上加载共享库,传递函数指针并将共享内存映射到客户端,然后让客户端执行代码服务器加载的库的名称。
最佳答案
根据定义,共享库是共享的,因此两个进程将使用相同的物理内存来存储库的代码段。因此,您不必编写一些狡猾的方案,只需将库和函数的名称从服务器传递到客户端,客户端将使用 dlopen() + dlsym() 获取函数地址>.
请注意,在这种情况下,将有两个数据段副本(如果库有一些全局或静态变量),例如如果服务器在库函数中设置了一些static
变量,那么它的值对于客户端来说不会改变。
关于c - 是否可以在共享内存上加载共享库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2839522/