arm-linux-androideabi/bin/ld:致命错误:-soname:必须采用非空参数

Kir*_*tan 1 c++ android cmake android-ndk

我正在用cmake android交叉编译gdcm它直到编译结束但最后我得到以下错误.你们如何在编译库时在cmake-gui或cmake中设置-soname,以便我们可以避免出现以下错误.

/opt/android/android-ndk-r10c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../../arm-linux-    androideabi/bin/ld: fatal error: -soname: must take a non-empty argument
collect2: error: ld returned 1 exit status
make[2]: *** [/home/likewise-open/SLKTECHLABS/kirtan.patel/Desktop/GDCM/GDCMSource/libs/armeabi-v7a/libgdcmjni.so] Error 1
make[1]: *** [Wrapping/Java/CMakeFiles/gdcmjni.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/home/kirtan.patel/Desktop/GDCM/GDCMSource/Source/MediaStorageAndFileFormat/gdcmImageWriter.h:36: Warning 822: Covariant return     types not supported in Java. Proxy method will return gdcm::Pixmap const &.
/home/kirtan.patel/Desktop/GDCM/GDCMSource/Source/MediaStorageAndFileFormat/gdcmImageCodec.h:45: Warning 473: Returning a     pointer or reference in a director method is not recommended.
Run Code Online (Sandbox Code Playgroud)

tri*_*san 9

正如Romanski所指出的,CMake版本3.2和3.0因UseSWIG.cmake文件不同而有不同的行为.在3.2 默认情况下启用NO_SONAME属性看起来像是在android构建中引发冲突,产生无效的链接选项与空TARGET_SONAME.-Wl,-soname,

使用3.2版本修复构建有两种方法

  1. string(REPLACE "<CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG><TARGET_SONAME>" "" CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_MODULE}") 完全消除了断开的链接选项
  2. set_target_properties(${MY_TARGET} PROPERTIES NO_SONAME OFF) 使用正确的so-name修复损坏的链接选项.