Android ndk 是否有人可以帮助解决此NDK链接器错误?我已经做了好几个小时了。NDK臭虫?

Android ndk 是否有人可以帮助解决此NDK链接器错误?我已经做了好几个小时了。NDK臭虫?,android-ndk,linker,Android Ndk,Linker,我整天都在尝试编译和链接一个足够简单的程序(基本上是一个helloworld示例)。我问过这个库的作者,他告诉我修复我的链接器依赖项。以下是相关信息: 我还尝试使用作者的构建工具进行编译,并将其链接为静态库,但没有成功。我还尝试了STL构建环境的所有变体。是我做错了什么,还是有别的问题 testbgfx.cpp #include <SDL.h> #include <bgfxplatform.h> #include <bgfx.h> int main(int

我整天都在尝试编译和链接一个足够简单的程序(基本上是一个helloworld示例)。我问过这个库的作者,他告诉我修复我的链接器依赖项。以下是相关信息:

我还尝试使用作者的构建工具进行编译,并将其链接为静态库,但没有成功。我还尝试了STL构建环境的所有变体。是我做错了什么,还是有别的问题

testbgfx.cpp

#include <SDL.h>
#include <bgfxplatform.h>

#include <bgfx.h>

int main(int argc, char* args[])
{
// SDL_Init( SDL_INIT_EVERYTHING ); Uncommenting this did nothing
SDL_Rect bounds;
SDL_GetDisplayBounds(0,&bounds);
int height = bounds.h;
int width = bounds.w;
SDL_Window* window = SDL_CreateWindow("TestApp",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,width,height,SDL_WINDOW_MAXIMIZED);

bgfx_sdlSetWindow(window);


bgfx::init();

return 0;

}
bgfx库的Android.mk(根据需要,位于ndk源目录中)

Android.mk for bx(实用程序库取决于我的bgfx,也在ndk sources目录中)

以下是相关的错误日志:

/home/noob/android/android-ndk-r10d/toolschains/arm-linux-androideabi-4.8/prebuild/linux-x86\u 64/bin/arm-linux-androideabi-g++-Wl,-soname,libmain.so-shared--sysroot=/home/noob/android/android-ndk-r10d/platforms/android-18/arch arm./obj/local/armeabi-v7a/objs/main/testbgfx.o./obj/local/armeabi-v7a/libbx.so./obj/local/armeabi-v7a/libbgfx.so./obj/local/armeabi/armeabi-v7a/libgnustl\u shared.so-无前缀-march=arm-v7-a,--fix-cortex-a8-Wl,-无未定义-Wl,-z,noexecstack-Wl,-z,relro-Wl,-z,现在-mthumb-L/home/noob/android/android-ndk-r10d/platforms/android-18/arch arm/usr/lib-lGLESv1_CM-lGLESv2-llog-lc-ldl-lm-landroid-lEGL-Wl,--未定义=Java_org_libsdl_app_SDLActivity_nativeInit-ldl-lGLESv1_CM-lGLESv2-llog-landroid/home/noob/android/android-ndk/sources/cxx stl/gnu libstdc++/4.8/libs/armeabi-v7a/libsupc++.a-lc-lm-o/obj/local/armeabi-v7a/libmain.so
jni/src/testbgfx.cpp:18:错误:未定义对“bgfx::init(bgfx::rendertype::Enum,bgfx::CallbackI*,bx::ReallocatorI*)”的引用
collect2:错误:ld返回了1个退出状态


make:**[obj/local/armeabi-v7a/libmain.so]错误1

bgfx的
Android.mk
实际上似乎没有列出任何要编译的源文件-您只列出了
local\u SRC\u文件:=SRC
,它似乎是一个目录。您需要在此处列出所有单独的C/C++源文件。

用于bgfx的
Android.mk
实际上似乎没有列出任何要编译的源文件-您只列出了
LOCAL\u SRC\u文件:=SRC
,它似乎是一个目录。您需要在此处列出所有单独的C/C++源文件。

链接器错误是…?刚刚添加了它。这是
ndk build V=1 clean all
的最后一次输出。其余的编译很好。我已经很久没有看NDK了,但是由于这是一个链接错误,您可能想看一下本地\u静态\u库和本地\u共享\u库。bfgx是“.so”文件还是“.a”?如果是静态库(.a),则应该使用本地静态库。如果是共享库(.so),您可能需要检查是否为bgfx库定义了正确的预处理器标志,以便将其函数定义为extern。不幸的是,我尝试了这两种方法。我怀疑是NDK错误(有很多),但想先检查一下这里。链接器错误是…?刚刚添加了它。这是
ndk build V=1 clean all
的最后一次输出。其余的编译很好。我已经很久没有看NDK了,但是由于这是一个链接错误,您可能想看一下本地\u静态\u库和本地\u共享\u库。bfgx是“.so”文件还是“.a”?如果是静态库(.a),则应该使用本地静态库。如果是共享库(.so),您可能需要检查是否为bgfx库定义了正确的预处理器标志,以便将其函数定义为extern。不幸的是,我尝试了这两种方法。我怀疑是NDK错误(有很多),但想先检查一下这里。或者使用类似于
MY_SRC_FILES:=$(通配符$(LOCAL_PATH)/SRC/*.cpp)\LOCAL_SRC_FILES:=$(MY_SRC_FILES:$(LOCAL_PATH)/%=%的东西。
谢谢!这完全奏效了。如果我有15次重复,我会把这个投上去!你至少应该能够将答案标记为已接受,即使你没有15次重复。完成!很高兴以任何可能的方式回馈:)另外,对于bitwise和Michael,感谢您花时间提供帮助。或者使用类似于
MY_SRC_文件:=$(通配符$(本地路径)/SRC/*.cpp)\LOCAL_SRC_文件:=$(MY_SRC_文件:$(本地路径)/%=%的东西。
谢谢!这完全奏效了。如果我有15次重复,我会把这个投上去!你至少应该能够将答案标记为已接受,即使你没有15次重复。完成!很高兴以任何可能的方式回馈:)同时,感谢bitwise和Michael,感谢您花时间提供帮助。
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := main

LOCAL_SRC_FILES := testbgfx.cpp
# Switching to static lib did nothing
#LOCAL_STATIC_LIBRARIES := bgfx
LOCAL_SHARED_LIBRARIES := SDL2 bx bgfx  

# Required for compilation
LOCAL_CXXFLAGS := $(LOCAL_CFLAGS) -D__STDC_LIMIT_MACRO -D__STDC_FORMAT_MACROS -D__STDC_CONSTANT_MACROS

LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog -lc -ldl -lm -landroid -lEGL

include $(BUILD_SHARED_LIBRARY)

$(call import-module,bx)
$(call import-module,bgfx)
$(call import-module,SDL2)
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := bgfx
#This did nothing
#LOCAL_C_INCLUDES += src

#Disabled those to see that would happen - nothing
#LOCAL_CFLAGS := -Wall -Wextra -g -Wa,--noexecstack -no-canonical-prefixes -ffunction-sections -Wno-psabi -Wunused-value -Wundef -fstack-protector
#LOCAL_CXXFLAGS := $(LOCAL_CFLAGS) -D__STDC_LIMIT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_CONSTANT_MACROS -MMD -MP -fPIC -std=c++0x

LOCAL_SRC_FILES := src
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
#Enabling the following changed nothing
#LOCAL_C_INCLUDES := $(LOCAL_PATH)/3rdparty
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

# This doesn't work
#LOCAL_EXPORT_C_INCLUDES += $(LOCAL_PATH)/src/*.h
# Neither does this
#LOCAL_EXPORT_C_INCLUDES += $(wildcard $(LOCAL_PATH)/src/*h)


LOCAL_SHARED_LIBRARIES := bx
LOCAL_EXPORT_SHARED_LIBRARIES := bx

#Switching to static did nothing
#include $(BUILD_STATIC_LIBRARY)
include $(BUILD_SHARED_LIBRARY)

$(call import-modules,bx)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := bx 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(BUILD_SHARED_LIBRARY)