Linux链接SO库和运行加载SO库的经验

我们在编译自己的```SO```库时,存在两类使用```SO```库的情况,**显式加载**和**隐含加载**

如果**显式加载**,则在合适的时机,在自家```SO```库的API执行过程中,需要主动加载依赖```SO```库,并查找函数名称,获取函数指针,然后进行调用。

**隐含加载**,在编译自家库的时间,只需要对方的头文件接口```API```,不需要指定```-lsoname```的依赖```SO```库的编译选项;但在自家库被链接成为可执行程序时,则需要指定```-lsoname```,让编译器生成代码,进行隐含加载依赖```SO```库的过程,并重新修改库函数调用地址。

注意:在生成可执行程序时,因为涉及到了具体的```SO```库,如果```SO```库中还携带了``soname```的标识字段,则程序启动执行的时间,会按照链接时依赖库中的```soname```字段指示信息,寻找加载的```SO```库。

通常```soname```字段信息中携带了更具体的版本号,而编译选项```-lsoname```只是一个库名字,或甚至仅是一个软连接!

你可能感兴趣的:(c&c++技术,linux,SO,链接,加载,启动运行)