当前位置: 首页 > 知识库问答 >
问题:

构建libcryptopp时没有存档符号表(运行ranlib)。通过ndk构建

罗昱
2023-03-14

在这里,我试图构建libcryptopp。一个完整的ndk构建,但我发现错误如下所示。

Androidmk

一个pplication.mk

setenvAndroid。在创建libcryptopp的过程中使用了它。a和。所以通过使用cryptopp 5.6.3

在终端产生的错误如下

$/Users/Kasbhapple/Documents/AndroidDocs/AndroidDT/adt-bundle-mac-x86_64-20140702/sdk/ndk bundle/ndk build

[armeabi]gdbserver:[arm-linux-androideabi-4.8]libs/armeabi/gdbserver

[armeabi]gdb设置:libs/armeabi/gdb。设置

[armeabi-v7a]gdbserver:[arm-linux-androideabi-4.8]libs/armeabi-v7a/gdbserver

[armeabi-v7a]gdb.setup

[x86]gdbserver:[x86-4.8]libs/x86/gdbserver

[x86]libs/x86/gdb.setup

[armeabi]可执行:source_file

/Users/kasbhapple/Documents/AndroidDocs/androiddt/adt-bundle-mac-x86_64-20140702/sdk/ndk bundle/toolschains/arm-linux-androidabi-4.8/prebuild/darwin-x86_64/bin//lib/gcc/arm-linux-androideabi/4.8/../../../../..//arm-linux-androideabi/bin/ld:error:jni/nativelib/libcryptopp。答:没有存档符号表(运行ranlib)

/Users/kasbhapple/Documents/AndroidDocs/androiddt/adt-bundle-mac-x86_64-20140702/sdk/ndk bundle/platforms/android-8/arch-arm/usr/lib/crtbegin_dynamic。o:crtbrand。c:函数_start:错误:未定义对“main”的引用

collect2:错误:ld返回1退出状态

我真的很难通过NDK构建c静态库。

我正在寻找解决方案。如果我做错了,给我一个完整的步骤。

共有1个答案

支华池
2023-03-14

构建libcryptopp时没有存档符号表(运行ranlib)。通过ndk构建

在你通过Android系统建立加密库之后。mk,您需要在libcryptopp上运行ranlib。a。不幸的是,我不知道如何分辨Android。mk来运行ranlib。

我猜测——这纯粹是猜测——你必须在Android中分两步完成这项工作。mk.你不能直截了当地直接从源代码构建共享对象。

  • 构建libCryptopp. a,运行ranlib
  • 构建libcryptopp.solibCryptopp. a

setenvAndroid。在创建libcryptopp的过程中使用了它。a和。所以通过使用cryptopp 5.6.3APP_STL=gnustl_static

由于GNU许可负担,脚本setenv-android.sh使用STLport。您的ndroid.mk使用GNU的STL。

您可能还应该使用相同的C运行库。此外,所有库必须使用相同的运行时。这意味着OpenGL,Crypto,[最喜欢的库],必须使用相同的C运行时,并且没有混合和匹配。此外,由于多个库正在使用C运行时,因此必须使用共享对象,而不是静态版本。

NDK的某个地方有一个自述文件讨论了这个问题。我认为它叫做CPP-README或类似的东西。

此外,当您调用setenv android时。sh,必须包含前导点。然后运行GNUmakefile交叉

. ./setenv-android.sh
make -f GNUmakefile-cross static dynamic cryptest.exe

最后,请不要发布图片。我几乎看不懂,因为我的眼睛老了。通常,安抚一个用户并不重要。在这种情况下,我是编写脚本和wiki页面的人,所以你想让我轻松,而不是让我难受:)

 类似资料:
  • 我有一个预构建的库,其中包含jar文件和.so文件,并且我刚将项目从eclipse转换到android studio,我在eclipse中的libs目录是 libs****Armeabi ****x86 ****jar文件,所以armeabi和x86包含.so文件,当我将project转换到android studio时,应用程序一开始构建得很好,但是.so文件中的一些类没有初始化,给出了错误 错

  • 编译错误 此环境中未提供编译器。也许您正在运行 JRE 而不是 JDK?完成时间: 2018-02-06T12:16:07 05:30 最终内存: 9M/63M 无法执行目标组织.apache.maven.plugins:maven-编译器-插件:3.1:编译(默认编译) 编译失败 此环境中未提供编译器。也许您正在运行 JRE 而不是 JDK? 要查看错误的完整堆栈跟踪,请使用-e开关重新运行Ma

  • 主要内容:执行多个任务,排除任务,发生故障时继续构建,选择执行哪些构建,获取构建信息Gradle提供了一个命令行来执行构建脚本。 它可以一次执行多个任务。在这里将介绍如何使用不同的选项来执行多个任务。 执行多个任务 可以从单个构建文件执行多个任务。使用命令处理构建文件。此命令将按列出的顺序编译每个任务,并使用不同的选项执行每个任务以及依赖关系。 示例 - 假设有四个任务 - ,,和。和取决于和。 看看下面的图表。 在上面的四个任务是相互依赖的,用一个箭头符号表示。 看看下面的代码

  • 目前,我发现谷歌云构建发生在构建docker图像的时候(不像我想象的那样,它会构建我的图像,然后执行我的图像来完成所有的构建)。那是在这篇文章里 谷歌云构建的快速启动 我有一个Dockerfile现在很简单 我有一个单一的下载和提取下载任何工件(zip文件)从最后的单构建运行构建(只有修改的服务器被构建或依赖于上一个CI构建的变化的服务器被构建,就像下游库可能被更改)。第一行只是列出了我需要在一个

  • 我有一个模型,其中包含一个内部字段

  • 每当我开始或运行我的项目时,gradle build运行从未停止,我尝试创建新的项目,但没有任何事情发生。有些项目工作得很好,但有些不是,而且永远在梯度构建运行中。而且,每当我打开项目时,这个cmd appt.exe文件就会打开。