android - arm-linux-androideabi/bin/ld : fatal error: -soname: must take a non-empty argument

标签 android c++ android-ndk cmake

我正在用 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.

最佳答案

作为Romanski指出 CMake 版本 3.2 和 3.0 由于 UseSWIG.cmake 中的差异而具有不同的行为文件。在 3.2 NO_SONAME属性(property)enabled通过 default看起来它会在 android 构建中引发冲突,从而产生无效的链接选项 -Wl,-soname, TARGET_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)使用正确的别名修复损坏的链接选项。

关于android - arm-linux-androideabi/bin/ld : fatal error: -soname: must take a non-empty argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26841603/

相关文章:

c++ - 在编译时区分别名和真实类型?

c++ - 手动调用析构函数并重用内存

android - iqengines 演示应用程序崩溃

java - FirebaseAuth 未创建用户

java - 如何使用搜索功能使过滤后的项目显示在 ListView 中(android)

c++ - 这是缓冲的正确大小吗?

android - 如何一起使用mobile-ffmpeg和共享库(.so)ffmpeg?

java - Android 应用程序允许用户下载在线内容

android - 如何让 Fragment 在其宿主 Activity 上转换阴影?

android - 从 Android 中的外部 native 可执行文件调用 java 代码