我在 vsc 中使用 c++ 创建了一个共享库。以下命令用于构建共享库(.so文件)
g++ -Wall -fPIC -I. -c Encrypt.cpp
g++ -shared -o libencrypt.so Encrypt.o
g++ -Wall -I. -c main.cpp
g++ -o test main.o -L. -lencrypt -l:libcryptopp.a
export LD_LIBRARY_PATH=.
./test
我在我的android项目中实现了libencrypt.so src/main/jniLibs/<architectures>
分别是x86, armeabi-v7a, arm64-v8a
然后在我的 app/build.gradle
我包括了 ff:
ndk {
abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a'
}
最后是我的 MainActivity.java
class MainActivity : AppCompatActivity() {
companion object {
init {
System.loadLibrary("encrypt")
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//tv_cipher.text = encryptString("test")
}
external fun encryptString(plaintext: String): String
}
抛出错误:libencrypt.so" has unexpected e_machine: 62 (EM_X86_64)
注意:创建共享库时我使用的是64位的Ubuntu 18.04环境。 谢谢!
最佳答案
错误非常清楚:您为单个体系结构(x86_64 或 64 位 Intel)编译了 libencrypt.so
,并尝试将其用于 ARM 体系结构(ARM7 和 AArch64,即精确)。
你应该 cross-compile your library对于不同的架构。
最简单的方法是依赖 CMake build system Android NDK 附带,只需让它交叉编译您的 libencrypt 文件即可。
或者,您可以分别为每个架构交叉编译 libencrypt
并将其移动到相应的 jniLibs
子目录中。
例如,对于 64 位 ARM,交叉编译命令为:
aarch64-linux-android21-clang++ -Wall -fPIC -I. -shared Encrypt.cpp -o src/main/jniLibs/arm64-v8a/libencrypt.so
关于android - .so 文件有意外的 e_machine : 62 (EM_X86_64),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60925854/