- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我之前问过基本相同的问题(不同的 NDK)here并认为我正确构建了 openssl,但是当我开始尝试将它链接到我的应用程序时,我发现我没有正确构建它。
如果我桥接来自@AlexCohn 的答案 here我从 setenv_android.sh
脚本开始。
我修改脚本以设置 THE_ARCH=arm64-v8a
以尝试针对 64 位 android 架构。
当我运行脚本时,它找不到一些东西:
ERROR: Failed to find Android cpp. Please edit this script.
ERROR: Failed to find Android gcc. Please edit this script.
ERROR: Failed to find Android g++. Please edit this script.
ERROR: AOSP_STL_INC is not valid. Please edit this script.
ERROR: AOSP_STL_LIB is not valid. Please edit this script.
ANDROID_NDK_ROOT: /Users/spartygw/android-ndk-r19/
AOSP_TOOLCHAIN_PATH: /Users/spartygw/android-ndk-r19//toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin
AOSP_ABI: arm64-v8a
AOSP_API: android-21
AOSP_SYSROOT: /Users/spartygw/android-ndk-r19//platforms/android-21/arch-arm64
AOSP_FLAGS: -funwind-tables -fexceptions -frtti
AOSP_STL_INC: /Users/spartygw/android-ndk-r19//sources/cxx-stl/stlport/stlport/
AOSP_STL_LIB: /Users/spartygw/android-ndk-r19//sources/cxx-stl/stlport/libs/arm64-v8a/libstlport_shared.so
当我查看 /Users/spartygw/android-ndk-r19//toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin
时,没有 aarch64-linux-android-cpp
或 -gcc
或 -g++
正如脚本输出所说:
$ ls -1 ~/android-ndk-r19//toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin
./
../
aarch64-linux-android-addr2line
aarch64-linux-android-ar
aarch64-linux-android-as
aarch64-linux-android-c++filt
aarch64-linux-android-dwp
aarch64-linux-android-elfedit
aarch64-linux-android-gprof
aarch64-linux-android-ld
aarch64-linux-android-ld.bfd
aarch64-linux-android-ld.gold
aarch64-linux-android-nm
aarch64-linux-android-objcopy
aarch64-linux-android-objdump
aarch64-linux-android-ranlib
aarch64-linux-android-readelf
aarch64-linux-android-size
aarch64-linux-android-strings
aarch64-linux-android-strip
我认为这是我上次惹麻烦的地方。我开始破解脚本以获得似乎有效的东西,现在我确定我所做的是错误的。
我真的不明白这个过程,所以我希望得到帮助。有人成功构建了 arm64-v8a 版本的 OpenSLL 吗?
最佳答案
我能够使用 NDK r19 为 android arm64 构建、链接和运行 openssl。但我不得不使用从 android-ndk-r19 生成的独立工具链。
$ cd /path/to/android-ndk-r19
$ ./build/tools/make-standalone-toolchain.sh \
--toolchain=aarch64-linux-android
这将在您的 tmp 目录中生成一个名为 aarch64-linux-android 的目录,将其 bin 目录放入您的路径中。此外,将您的 ANDROID_NDK_HOME 设置为此位置。
$ export PATH=/path/to/aarch64-linux-android/bin:${PATH}
$ export ANDROID_NDK_HOME=/path/to/aarch64-linux-android
然后只需运行 openssl 的 Configure 和 make。
$ cd /path/to/openssl1.1.1
$ ./Configure android-arm64
$ make
./Configure 的输出如下:
$ ./Configure android-arm64
Configuring OpenSSL version 1.1.1b-dev (0x10101020L) for android-arm64
Using os-specific seed configuration
Creating configdata.pm
Creating Makefile
**********************************************************************
*** ***
*** OpenSSL has been successfully configured ***
*** ***
*** If you encounter a problem while building, please open an ***
*** issue on GitHub <https://github.com/openssl/openssl/issues> ***
*** and include the output from the following command: ***
*** ***
*** perl configdata.pm --dump ***
*** ***
*** (If you are new to OpenSSL, you might want to consult the ***
*** 'Troubleshooting' section in the INSTALL file first) ***
*** ***
**********************************************************************
$
最后,我创建了一个新的 Android Studio 项目,带有 c++11、异常和 rtti 支持(通过新项目向导),并在构建的输出中链接了一个 CMakeLists.txt,该文件稍作修改由 Android Studio 创建:
cmake_minimum_required(VERSION 3.4.1)
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/native-lib.cpp )
# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.
find_library( # Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log )
# HERE ARE THE PARTS I EDITED:
# NOTE FOR THE COMMANDS ABOVE, THIS IS JUST THE OPENSSL SOURCE DIR.
set (SSL_PATH /path/to/ssl/build/outputs/)
include_directories(${SSL_PATH}/include)
set (open-ssl-libs ${SSL_PATH}/libssl.a ${SSL_PATH}/libcrypto.a)
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.
target_link_libraries( # Specifies the target library.
native-lib
# LINK SSL AND CRYPTO HERE:
${open-ssl-libs}
# Links the target library to the log library
# included in the NDK.
${log-lib} )
这足以表明它有链接,但我在 Android Studio 生成的样板 C++ 代码中添加了一个对 libssl.a 的小引用:
#include <jni.h>
#include <string>
#include <openssl/ssl.h>
extern "C" JNIEXPORT jstring JNICALL
Java_com_vernier_android_test_1ssl_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
SSL* ssl = SSL_new(nullptr);
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
我成功运行了该应用程序。
关于android - 如何使用 NDK 19 在 OSX Darwin 上为 64 位 Android 交叉编译 OpenSSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54656695/
我带着为 OSX 编写 PAM 模块的永无休止的传奇再次回来了。我已经写好了模块。它在使用 ssh 或启动新的终端窗口或 su 时有效。我真正真正想要的只是 ssh 和登录窗口。 我的 PAM 模块在
我们有一个类似于Soundflower的虚拟音频设备驱动程序。该虚拟设备将在声音系统首选项中列出。每当我们的设备在系统偏好设置中被选择时,它就会阻止空闲 sleep 。如果我们将选择切换为默认输出设备
我带着为 OSX 编写 PAM 模块的永无止境的传奇又回来了。我已经编写了模块。它在使用 ssh 或启动新的终端窗口或 su 时有效。我真的、真的、真的想要的只是 ssh 和登录窗口。 我的 PAM
我想在 osx lion 上安装 pyaudio,但我无法做到。每次我尝试使用 pkg 时,它都不会安装任何东西。当我尝试使用 pip 安装它时,出现以下错误(以及许多其他行): lipo: can'
我使用 Java 进行开发已有很长时间了,但直到最近才从 Windows 切换到 OSX。在 Windows 中,我发现一切都足够简单易懂。我可以将 JDK 安装到一个选择的位置,其中还包括一个 JR
运行 Mac OSX 10.7.5 我想在 USB3 外部硬盘上启用 NTFS 并需要 UUID 来执行此操作( http://ntfsonmac.com ),但 diskutil 拒绝给我 UUID
我正在尝试为 Finder 创建服务,但我的应用程序不需要有 UI。好吧,我只需要一个 UI 来请求用户提供更多信息,我的应用程序有时可能需要这些信息。 但是应用程序应该在没有任何 UI 且 Dock
我正在尝试在我的 mac 上使用本地服务器,但它似乎忽略了/etc/hosts 文件中的 localhost 设置。找到了几个页面,其中解决方案是重新安装,并将 localhost 放在/etc/ho
这是一个 OSX 链接器问题。我不认为 OSX(BSD 或 Mach 层)在乎零页有多大,或者它是否真的存在。我认为这是一个工具的事情。但这是我的意见,这就是我问的原因。 -pagezero_size
我正在构建一个将在 iOS/OSX 应用中使用的模块。 客户坚持认为该模块可以在 iOS 和 OSX 上运行。 我需要检查我在 iOS 和 OSX 上使用 UIDevice 时使用的系统版本 FTWD
我尝试在 OSX 10.8.2 中使用 gnuplot,并看到 x11 是不明确或未知的终端类型。一些研究表明 x11 不受支持,我下载了 XQartz,但我仍然收到相同的错误消息。 我使用 expo
我从官方网站下载了 PostgreSQL 并运行了 .dmg 安装程序。之后我下载了 pgadmin3,我确实能够连接到数据库。 当我运行“psql”时,出现以下错误: psql: could not
自从升级到 OSX Catalina 以来,我一直遇到 UnsatisfiedLinkErrors 问题,尝试在 java 下运行 JNI 包装的库,其中包含多个 native 库引用,这些引用在早期
在 OSX 10.6 上使用 make 构建 C++ 项目时,我确定预处理器定义 __LP64__ 似乎始终自动由编译器(即,它没有在任何头文件中定义)(参见 Where is __LP64__ de
我正在尝试将我的 iOS 应用程序移植到 Mac OS X SDK,并且发现我收到以下错误消息:'Collection' redeclared as a different kind of symbo
我一直在 OSX 10.14 中成功使用我的代码生成 Metal 纹理: let textureLoaderOptions = [MTKTextureLoader.Option.origin : MT
我对编码有些陌生,想用 MySQL 后端启动我的第一个 Django 应用程序。我已经在我的 Windows 机器上使用这个设置将近一年了,但它是一个继承的代码库——不幸的是,我从未尝试过从头开始构建
我正在迁移到一台新计算机,同时从雪豹迁移到狮子。 phpunit 似乎没有进行迁移,所以我重新安装了它。然而,pear 的标准安装似乎不适用于我的 php 家庭brew 安装。这是错误: phpuni
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 已关闭 7 年前。 Improve
我在 OSX10.9 上为我的应用程序构建了一个 Java 7 bundle ,一切看起来都很好,但是当我在 OSX 10.7 上尝试它时,它在启动时崩溃,它已经在 10.7.3 和 10.7.5 上
我是一名优秀的程序员,十分优秀!