Android .so文件创建过程中发生链接器错误。错误:函数未实现

Android .so文件创建过程中发生链接器错误。错误:函数未实现,android,android-ndk,shared-libraries,ld,clang++,Android,Android Ndk,Shared Libraries,Ld,Clang++,在.so“文件创建的链接阶段,“ld”链接器将标记一条错误消息 我试着在它周围搜索,但找不到任何具体的东西。此邮件将被标记为 “--trace”链接器标志已启用“--trace”转储链接步骤过程中使用的文件。平台是Windows 下面提到的是错误消息。链接过程中多次出现此消息。 任何线索将不胜感激 错误: arm-linux-androideabi/bin\ld: error: dummy.so: write: Function not implemented** 最近也遇到了这个问题,而且它

.so“
文件创建的链接阶段,
“ld”
链接器将标记一条错误消息

我试着在它周围搜索,但找不到任何具体的东西。此邮件将被标记为
“--trace”
链接器标志已启用
“--trace”
转储链接步骤过程中使用的文件。平台是
Windows

下面提到的是错误消息。链接过程中多次出现此消息。 任何线索将不胜感激

错误:

arm-linux-androideabi/bin\ld: error: dummy.so: write: Function not implemented**

最近也遇到了这个问题,而且它也只在Windows上进行调试构建时发生。我始终无法找到一个代码修复程序来让LD链接器满意并解决错误

但是,我能够切换到使用LLD LLVM链接器,并在Windows上重新运行调试构建。切换后,LLD链接器发现了一些LD似乎从未检测到的链接器错误。在解决了这些问题之后,我又成功地构建了

要切换到使用LLD链接器,我在构建中添加了以下链接器标志:

-fuse-ld=lld
-Wl,--no-threads
LLD链接器在NDK r18中可用,因此您需要使用合适的NDK进行构建,否则将无法识别标志

我正在使用CMake,所以我只是在我的共享库的目标链接库声明的末尾添加了这些标志

我添加了第二个标志“-Wl,-no threads”,以禁用多线程链接,这显然是Windows上的一个问题,并导致其挂起(有关更多信息,请参阅)

如果您使用的是ndk构建,那么默认情况下应该已经禁用多线程链接(从ndk r19b开始)


注:我目前正在使用NDK r19c构建。最终,Android NDK将在默认情况下切换到LLD LLVM链接器(估计为r21)。

最近也遇到了这个问题,而且它也只在Windows上进行调试构建时发生。我始终无法找到一个代码修复程序来让LD链接器满意并解决错误

但是,我能够切换到使用LLD LLVM链接器,并在Windows上重新运行调试构建。切换后,LLD链接器发现了一些LD似乎从未检测到的链接器错误。在解决了这些问题之后,我又成功地构建了

要切换到使用LLD链接器,我在构建中添加了以下链接器标志:

-fuse-ld=lld
-Wl,--no-threads
LLD链接器在NDK r18中可用,因此您需要使用合适的NDK进行构建,否则将无法识别标志

我正在使用CMake,所以我只是在我的共享库的目标链接库声明的末尾添加了这些标志

我添加了第二个标志“-Wl,-no threads”,以禁用多线程链接,这显然是Windows上的一个问题,并导致其挂起(有关更多信息,请参阅)

如果您使用的是ndk构建,那么默认情况下应该已经禁用多线程链接(从ndk r19b开始)


注:我目前正在使用NDK r19c构建。最终,Android NDK将在默认情况下切换到LLD LLVM链接器(估计为r21)。

在我的例子中,当我们向项目添加大量代码并生成结果时,NDK19c出现在32位目标上。因此大小超过2GB。lld生成更小的二进制文件,这可能就是它工作的原因。在我的例子中,它发生在NDK19c的32位目标上,当时我们在项目中添加了很多代码,结果是。所以大小超过了2GB。lld生成更小的二进制文件,这可能就是它工作的原因。