使用 autogen 和 cmake 构建时共享 protobuf 库的 SONAME 不一致

SONAME incosistency of shared protobuf lib when building with autogen and cmake

当我使用 autogen 构建共享 protobuf(版本 3.15.8)库时,我得到 libprotoc.so.26:

./autogen.sh
./configure --enable-shared
make

当我用 cmake 构建它时,我得到 libprotobuf.so.3.15.8.0.

cd cmake && mkdir build && cd build
cmake -Dprotobuf_BUILD_SHARED_LIBS=on ..
make 

有没有办法用cmake构建libprotoc.so.26? (如何在那里设置 SONAME?)

您似乎在寻找共享库目标的 SOVERSION 属性。据我所知,没有影响目标属性的命令行选项,因此您需要修改相应的 CMakeLists.txt 文件。您需要确定为库选择的 CMake 目标名称(项目的特征,而不是 CMake 本身的特征),比如“protobuf_lib”。然后,您将添加形式为

的命令
target_set_properties(protobuf_lib
    PROPERTIES SOVERSION 26)

或者,如果已经有针对相关目标的 target_set_properties 命令,您可以将 SOVERSION 26 添加到该命令的 属性 列表中。