C++ `dlopen` / `dlsym`:动态加载共享库与运行时符号解析

哈喽,各位好!今天咱们聊聊C++里一个相当酷炫,但又稍微有点“野”的特性:动态加载共享库和运行时符号解析,也就是 dlopen 和 dlsym。 一、什么是动态加载?为什么要用它? 想象一下,你正在开发一个图像处理软件。这软件功能很多,比如有模糊、锐化、色彩调整等等。 如果把所有功能都编译进一个巨大的可执行文件,那会怎么样? 体积庞大: 即使你只用到了模糊功能,其他锐化和色彩调整的代码也得跟着你一起“旅行”,浪费磁盘空间。 编译缓慢: 每次修改一个小的功能,都要重新编译整个程序,耗时耗力。 扩展困难: 如果你想添加一个新的滤镜,必须重新编译整个程序,然后重新发布。 这时候,动态加载就派上用场了! 它可以让你把一些功能模块(比如模糊、锐化)编译成独立的共享库(.so 文件在 Linux/Unix 系统中,.dll 文件在 Windows 系统中)。只有在程序运行的时候,需要某个功能时,才动态地加载相应的共享库,并使用其中的函数。 动态加载的优点: 优点 解释 模块化 将程序分解成独立的模块,每个模块负责特定的功能。 减小体积 只有在需要时才加载模块,减小了程序的初始体积。 快速编译 修改 …