使用 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
添加到该命令的 属性 列表中。
当我使用 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
添加到该命令的 属性 列表中。