CMake:由程序集文件制成的共享库中的SOVERSION和Mac库ID

时间:2018-09-12 08:37:17

标签: assembly cmake shared-libraries versioning

我有一个小项目,可以从一对汇编文件创建一个共享库。我一直在尝试遵循示例,以便生成的库

  • 具有版本控制功能(在Mac上为libFastCompression.1.dylib,在Linux上为libFastCompression.so.1)
  • 在Mac上具有完整路径作为其ID

具体来说,我的CMakeLists.txt具有:

project(lzvn LANGUAGES C ASM VERSION 1.0.0)
set(lzvn_FULL_VERSION "${lzvn_VERSION_MAJOR}.${lzvn_VERSION_MINOR}.${lzvn_VERSION_PATCH}")
# snip
add_library(FastCompression SHARED lzvn_decode.S lzvn_encode.S)
set_target_properties(FastCompression PROPERTIES
    VERSION ${lzvn_FULL_VERSION_MAJOR}.${lzvn_VERSION_MINOR}
    SOVERSION ${lzvn_VERSION_MAJOR})

这在我用作示例的项目中有效,但在此特定项目中无效。在那里,我只得到一个libFastCompression.dylib(或.so)文件,在Mac上,库ID根本不包含任何路径信息。

我是在俯视/遗忘某些东西,还是正在寻找未实现/不支持(仅在CMake中)仅由程序集文件构建的库的东西?

项目:github.com/RJVB/lzvn

谢谢!

René

1 个答案:

答案 0 :(得分:0)

LINKER_LANGUAGE属性添加到值为C的目标中。这将为我带来以下链接命令:(至少在Ubuntu上,没有Mac可用)

/usr/bin/cc -fPIC   -shared -Wl,-soname,libFastCompression.so.1 -o libFastCompression.so.4.0 CMakeFiles/FastCompression.dir/lzvn_decode.S.o CMakeFiles/FastCompression.dir/lzvn_encode.S.o