【问题标题】:linking a library to an android ndk application in visual studio 2015在 Visual Studio 2015 中将库链接到 android ndk 应用程序
【发布时间】:2015-11-16 14:22:28
【问题描述】:

我在 Visual Studio 2015 中创建了一个适用于 Android 的 Native-Activity 应用程序。如果我只运行示例代码,该应用程序就可以运行。我想在我的应用程序中使用外部库。为此,我执行以下操作:

  1. 将包含目录添加到 C/C++->常规->其他包含目录
  2. 将 lib/x86 路径添加到 Linker->General->Additional Library Directories
  3. 将库名称添加到链接器->输入->库依赖项

通过这些设置,我可以在我的项目中使用一些库代码并对其进行编译。例如,如果我应该省略库目录,编译器会抱怨未实现的函数。

但如果我在模拟器或安卓手机上运行生成的 apk,它会立即崩溃,甚至在遇到任何断点之前。

即使我实际上不使用该库(注释掉我自己的所有代码),只是链接它,应用程序也会崩溃。

我得到的一个线索是,即使该库用于编译应用程序,它也不会被复制到 apk 文件中。我已经解压了 apk,它在 lib\x86 中包含 2 个文件:gdbserver 和 libAndroid1.so(这是我本机活动的编译版本)。但是我链接的库不存在。

我想我应该在项目中的某个地方指出我希望我的库包含在 apk 中,但我应该在哪里做呢?

【问题讨论】:

  • “它在 lib\x86 中包含 2 个文件”。所以,只是为了确保:您的 Android 手机和您创建的用于模拟器的 AVD 都是基于 x86 的?
  • 不,手机是基于 ARM 的。 VS 生成两个 apk 文件:每个平台一个。这取决于我在编译和运行时选择的配置。 ARM apk 包含相同的文件,但在 lib\armeabi-v7a 中。
  • 您能否分享您遇到的问题的 Android Logcat 日志?

标签: c++ android-ndk visual-studio-2015 dynamic-linking


【解决方案1】:

第 2 步实际上应该是:将 lib\$(Platform) 路径添加到 Linker->General->Additional Library Directories

我怀疑您的 Android 设备运行的是 x86(除非它在模拟器中)。 $(Configuration)会自动解析为Debug或Release,$(Platform)会自动解析为ARM、ARM64、x86等

每个库平台都有一个单独的文件夹。

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多