我有一个* .so库,它使用dlopen从系统库中获取一些信息。库可以同时由多个应用程序使用。 也许这是一个愚蠢的问题,但是在我做dlopen之前,我应该聚集库吗?我没有在任何地方找到直接答案。
答案 0 :(得分:1)
与评论中所说的类似,除非您正在访问可能会改变您的共享资源,否则您不需要信号量(flock)。 (IE。访问共享内存并需要确保该数据的并发性)。动态加载的方式... dlopen()...工作
由于链接的工作方式,GOT / PLT的重定位和修改是在(进程调用dlopen)的内存空间中完成的,而不是映射共享对象的位置。
让共享对象在只读内存中你永远不必担心它们会突然改变你,所以不需要一群人:)!
注意:因为你有一个共享对象链接到其他共享对象...初始共享对象的GOT需要更新/ mod与使用dlopen()加载的库的重定位...但是存储在进程唯一内存空间的ar / w段中,而不是存储在共享对象的内存空间中。