CMake:共享库中的 SOVERSION 和 Mac 库 ID 由程序集文件构成
CMake: SOVERSION and Mac library id in shared library made from assembly files
我有一个小项目,它从一对程序集文件创建一个共享库。我一直在尝试遵循示例,以便生成的库
- 有版本控制(libFastCompression。1.dylib 在 Mac 或 libFastCompression.so.1 在 Linux)
- 在 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 根本不包含任何路径信息。
我 overlooking/forgetting 是什么东西,或者我正在寻找的东西不是 implemented/supported(在 CMake 中)专门从汇编文件构建的库?
谢谢!
勒内
将 LINKER_LANGUAGE
属性 添加到您的目标值 C
。这导致了我的以下 link 命令:(至少在 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
我有一个小项目,它从一对程序集文件创建一个共享库。我一直在尝试遵循示例,以便生成的库
- 有版本控制(libFastCompression。1.dylib 在 Mac 或 libFastCompression.so.1 在 Linux)
- 在 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 根本不包含任何路径信息。
我 overlooking/forgetting 是什么东西,或者我正在寻找的东西不是 implemented/supported(在 CMake 中)专门从汇编文件构建的库?
谢谢!
勒内
将 LINKER_LANGUAGE
属性 添加到您的目标值 C
。这导致了我的以下 link 命令:(至少在 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