【问题标题】:Compiling a CPP library into a DLL, can't find stdlib将CPP库编译成DLL,找不到stdlib
【发布时间】:2014-07-29 14:31:33
【问题描述】:

一般来说,我正在尝试将 CPP 库作为 Android 的 DLL 编译到我自己的库中(或者更准确地说,是一个 .so 文件)。当我的工具包(稍后会详细介绍)运行以下几行时:

arm-linux-androideabi-g++ -Iinclude/common -Iinclude/android -std=gnu++11 --sysroot=c:\android\ndk/platforms/android-19/arch-arm -Ic:\android\ndk/sources/cxx-stl/gnu-libstdc++/4.6/include -Ic:\android\ndk/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include -DHXCPP_VISIT_ALLOCS -DHXCPP_API_LEVEL=0 -IC:/HaxeToolkit/haxe/lib/hxcpp/3,1,39/include -Iinclude -fpic -fvisibility=hidden -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums "-D_LINUX_STDDEF_H " -Wno -psabi -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -fomit-frame-pointer -fexceptions -fno-strict-aliasing -finline-limit=10000 -DANDROID=ANDROID -Wa,--noexecstack -O2 -DNDEBUG -c -x c++ -frtti ./common/ExternalInterface.cpp -oobj/android-v7/802265c0_ExternalInterface.obj
arm-linux-androideabi-g++ -o../ndll/Android/libopenflgpg-v7.so -frtti -nostdlib -Wl,-shared,-Bsymbolic -Wl,--no-undefined -Wl,-z,noexecstack --sysroot=c:\android\ndk/platforms/android-19/arch-arm -Lc:\android\ndk/platforms/android-19/arch-arm/usr/lib @obj/android-v7/all_objs libs/android/libgpg-v7.a c:\android\ndk/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/libgnustl_static.a c:\android\ndk/platforms/android-19/arch-arm/usr/lib/crtbegin_so.o c:\android\ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.6/libgcc.a c:\android\ndk/platforms/android-19/arch-arm/usr/lib/libc.so c:\android\ndk/platforms/android-19/arch-arm/usr/lib/libm.so -llog -ldl

我收到了这个错误(还有很多类似的错误):

gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: libs/android/libgpg-v7.a: in function gpg::OperationQueue::Impl::StartThreadIfNotRunningLocked():turn_based_match_impl.pb.cc(.text._ZN3gpg14OperationQueue4Impl29StartThreadIfNotRunningLockedEv+0x94): error: undefined reference to 'std::__1::thread::~thread()'

似乎找不到std 库;为什么不?我在 Windows 上,安装了 Microsoft Visual Studio C++ 2010 Express,如果有帮助的话。

更具体地说,我正在尝试在 Haxe 中启用 Google Play Games C++ SDK,方法是使用 HXCPP 编译一个 NDLL,其中包含我可以在 Haxe 代码中使用 Lib.load 调用的所有函数。完整的项目是here

我尝试过包含typeinfo 和大约十几个其他标题,但无济于事。我承认 C++ 不是我的强项,所以我可能会忽略一些非常明显的东西。感谢您的帮助!

【问题讨论】:

  • 我可能完全错了,但在 std::__1::thread 中,__1 提醒我将 clang++ 编译代码与 g++ 编译库 (boost) 链接时出现错误。因此,也许您的一个链接库期望来自另一个标准库(例如 libc++)而不是 libstdc++
  • 好的,但是我该如何解决呢?或者至少,测试一个不同的标准库。
  • 我不太清楚。一种方法是使用相同的标志重新编译所有外部库,但我想这不是很令人满意。此外,您确定 std 的 gcc 实现具有可用于 android 的 std::thread 吗?
  • 另外,如果可以的话,尝试用clang++编译
  • 好吧,我不能重新编译 Google Play 库,因为它不是开源的,否则我会的。 AFAIK 通过 HXCPP 为 Android 编译的唯一方法是使用arm-linux-androideabi-g++,但我想我不确定正在使用什么标准库。再说一次,我对 C++ 不是很擅长。

标签: android c++ dll haxe


【解决方案1】:

将此添加到您的 Application.mk 文件中:

NDK_TOOLCHAIN_VERSION := clang

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多