动态库realname、soname和linkname

1. realname

等同于库文件的filename,是在库文件生成时就被指定的

怎么指定库文件名,例如

(1) g++编译程序时指定realname

$ g++ -g test1.cpp -o test1.so -std=c++11

realname=test1.so

命令就是
$ g++ -g xxx.cpp -o $(realname) dependence flags 

常用的realname是带版本号的,如下

realname的一般格式为lib$(name).so.$(major).$(minor).$(revision),$(name)是动态库的名字,$(major).$(minor).$(revision)分别表示主版本号,子版本号和修正版本号。

生成命令如下:

$ g++ -g test1.cpp -shared -fPIC -o test1.so.1.1.1 -std=c++11

realname=test1.so.1.1.1

命令就是
$ g++ -g xxx.cpp -shared -fPIC -o $(realname) dependence flags

(2) 利用cmake编译makefile指定realname

在CMakeLists.txt中添加如下

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [<source>...])

/****一个完成的例子如下****/
cmake_minimum_required(VERSION 3.5)
project(test1)
add_executable(test1 test1.cpp)
add_definitions(-std=c++11)
add_library(test1_library SHARED test1.cpp)
/****一个完成的例子如下****/

realname=libtest1_library.so

2. soname

在库文件生成时被指定

(1) g++编译程序时指定soname

* 其一般格式为lib$(name).so.$(major).$(minor),即lib+动态库名+.so+主版本号,soname会被写入库文件中。
* 同时指定realname和soname

$ g++ test1.cpp -shared -fPIC -Wl,-soname,libtest1.so.1.1 -o libtest1.so.1.1.1 -std=c++11

生成libtest1.so.1.1.1,使用readelf -d $(realname)查看库文件的soname

$ readelf -d libtest1.so.1.1.1

动态库realname、soname和linkname

(2) 利用cmake编译makefile指定soname
使用add_library时生成的soname和realname一样

3. linkname
在链接时使用,一般格式为lib$(name).so,通常是$(realname)文件或者$(soname)文件的软链接。如

// 将linkname和realname关联起来
$ ln -s libtest1.so.1.1.1  libtest1.so

编译阶段需要的是×××.so库,需要libtest1.so存在,如果它是软链接,那么它链接的库也需要存在
运行时链接的是soname,所以libtest1.so.1.1必须存在。libtest1.so.1.1可以设置为libtest1.so.1.1.1的软链接,那么libtest1.so.1.1.1必须存在。也可以直接改名字

参考
https://blog.csdn.net/j_h_c/article/details/98375371
https://m.linuxidc.com/Linux/2016-06/132669.htm

原文链接: https://www.cnblogs.com/vivian187/p/14874286.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    动态库realname、soname和linkname

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/397025

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月7日 上午9:13
下一篇 2023年4月7日 上午9:13

相关推荐