linux下生成的动态库的SONAME默认同库的名称一致。
如库libtest.1.2.so;
通过readelf -d libtest.1.2.so可以查看到其SONAME为:libtest.1.2.so
通过gcc设置参数:-Wl,-soname,libtest.so可以对其SONAME进行修改。
gcc编译示例:
gcc -fPIC -shared -Wl,-soname,libtest.so -o libtest.1.so ./test.cpp
camke示例:
project(test)
...
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-soname,libtest.so")
...
add_library(${PROJECT_NAME}.1 SHARED ${PROJECT_SRCS})
#关闭cmake的SONAME,避免将gcc参数设置的SONAME覆盖
set_target_properties(${PROJECT_NAME}.1 PROPERTIES NO_SONAME_1)
注:cmake的修改方式处理后,不能通过set_target_properties(${PROJECT_NAME} PROPERITES VERSION 1.0 SOVERSION 1)来设置库的版本了。
以上的编译执行后,该库的名称为libtest.1.so,但其SONAME为libtest.so