如何在Visual Studio的Android共享库.so项目中正确使用c ++静态库.lib?

问题描述

我需要为项目创建一个.so Android共享库,并且需要使用C ++静态库(.lib)中的函数.so库只能用作桥梁,因此我可以在Android应用程序和游戏中使用静态库中的函数。我已经在Visual Studio 2017中创建了一个C ++跨平台Android项目(也在VS2019中对其进行了测试),包括静态库的头文件和库本身,并且所有内容都在理论上进行了配置和链接

我正在使用的当前库是一个简单的静态库,用于测试,只有一个功能

namespace StaticLibrary
{
    extern "C" void Func() 
    {
        // something
    }
}

Android的文件如下所示:

#include "StaticLibraryHeader.h"
extern "C"
{
    // ...

    void StaticLibFunc()
    {
        StaticLibrary::Func();
    }
}

当我尝试编译项目时,编译器会说:

C:\\Microsoft\AndroidNDK64\android-ndk-r16b\toolchains\x86_64-4.9\prebuilt\windows-x86_64/lib/gcc/x86_64-linux-android/4.9.x/../../../../x86_64-linux-android/bin\ld: error: F:\Android_IOS_libs\MobileLibraries2019\Build\x64\Debug\libStaticLibTest_x64_Debug.lib: bad extended name index at 778

和:

undefined reference to 'Func'

我可以通过使用链接器的--whole-archive选项摆脱第二个错误,但是随后会显示此新错误以及第一个错误

C:\\Microsoft\AndroidNDK64\android-ndk-r16b\toolchains\x86_64-4.9\prebuilt\windows-x86_64/lib/gcc/x86_64-linux-android/4.9.x/../../../../x86_64-linux-android/bin\ld: Fatal error: F:\Android_IOS_libs\MobileLibraries2019\Build\x64\Debug\libStaticLibTest_x64_Debug.lib: attempt to map 60 bytes at offset 6324 exceeds size of file; the file may be corrupt

我还使用了Google Lib2A(https://code.google.com/archive/p/lib2a/)创建一个.a文件,但是随后发生以下错误

C:\\Microsoft\AndroidNDK64\android-ndk-r16b\toolchains\x86_64-4.9\prebuilt\windows-x86_64/lib/gcc/x86_64-linux-android/4.9.x/../../../../x86_64-linux-android/bin\ld: error: F:\Android_IOS_libs\MobileLibraries2019\Krilloud_Android\lib\x64\libStaticLibTestDLL_x64_Debug.a: member at 192 is not an ELF object
C:\\Microsoft\AndroidNDK64\android-ndk-r16b\toolchains\x86_64-4.9\prebuilt\windows-x86_64/lib/gcc/x86_64-linux-android/4.9.x/../../../../x86_64-linux-android/bin\ld: error: F:\Android_IOS_libs\MobileLibraries2019\Krilloud_Android\lib\x64\libStaticLibTestDLL_x64_Debug.a: member at 870 is not an ELF object
C:\\Microsoft\AndroidNDK64\android-ndk-r16b\toolchains\x86_64-4.9\prebuilt\windows-x86_64/lib/gcc/x86_64-linux-android/4.9.x/../../../../x86_64-linux-android/bin\ld: error: F:\Android_IOS_libs\MobileLibraries2019\Krilloud_Android\lib\x64\libStaticLibTestDLL_x64_Debug.a: member at 1656 is not an ELF object

我不是Android / Java开发人员,所以我在这里迷路了。如何在.so项目中正确链接和使用我的静态库?可以使用Visual Studio完成此操作,还是真的需要为此安装Android Studio?我还需要为iOS创建相同的东西,因此我希望在Visual Studio解决方案中拥有两个项目。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)