我正在使用Cmake for Android(使用Android NDK)编译 libclang 。
这是CMake配置的一部分,用于配置文件名和soname:
set_target_properties(libclang
PROPERTIES
VERSION ${LIBCLANG_LIBRARY_VERSION}
DEFINE_SYMBOL _CINDEX_LIB_)
在其他文件中:
set(LIBCLANG_LIBRARY_VERSION
"${CLANG_VERSION_MAJOR}" CACHE STRING
"Major version number that will be appended to the libclang library")
和
if(NOT DEFINED CLANG_VERSION_MAJOR)
set(CLANG_VERSION_MAJOR ${LLVM_VERSION_MAJOR})
endif()
由于我编译了版本为“ 7.0.0”的llvm / clang libclang文件名,所以soname为libclang.so.7
,因此Android不需要。
~/llvm/build anton$ls -l lib/libclang.so
lrwxrwxrwx 1 anton anton 13 Nov 30 12:13 lib/libclang.so -> libclang.so.7
~/llvm/build anton$arm-linux-androideabi-readelf --dynamic lib/libclang.so.7 | grep SONAME
0x0000000e (SONAME) Library soname: [libclang.so.7]
如何避免在文件名和soname中都添加“ .7”(使其仅为libclang.so
)?
我试图:
1)注释属性如下:
set_target_properties(libclang
PROPERTIES
#VERSION ${LIBCLANG_LIBRARY_VERSION}
DEFINE_SYMBOL _CINDEX_LIB_)
由于某种原因,文件名和soname仍为“ .so.7”
2)将其设置为空:
set_target_properties(libclang
PROPERTIES
VERSION ""
DEFINE_SYMBOL _CINDEX_LIB_)
,文件名和soname为“ .so”。 (末尾有点)。
我该怎么办?
答案 0 :(得分:1)
我无法对此进行测试,但是尝试设置NO_SONAME属性而不是其他修改。
set_target_properties(libclang
PROPERTIES
NO_SONAME 1 )
答案 1 :(得分:0)
由于@Fred,我可以通过以下方法(确实是肮脏的把戏)获得它:
set_target_properties(libclang
PROPERTIES
#VERSION ${LIBCLANG_LIBRARY_VERSION}
SUFFIX ""
VERSION "so"
SOVERSION "so"
DEFINE_SYMBOL _CINDEX_LIB_)
我已经检查它是否具有正确的文件名和名称:
~/llvm/build anton$ls -l lib/libclang.so
-rwxrwxr-x 1 anton anton 33590456 Nov 30 12:54 lib/libclang.so
~/llvm/build anton$arm-linux-androideabi-readelf --dynamic lib/libclang.so | grep SONAME
0x0000000e (SONAME) Library soname: [libclang.so]
但是我不确定smth是否错误,因为我还没有尝试加载它。
请让我知道是否有适当的方法。