我尝试使用支持c ++ 11的ndk r8d设置我的第一个android项目.一些c + 11机制工作正常(即lambada表达式),但是当我尝试使用其中一个新的字符串操作时,编译失败(错误:'stol'不是'std'的成员).这是我的项目设置:
Application.mk
APP_MODULES := MyLib
APP_CPPFLAGS := -std=gnu++0x
APP_CPPFLAGS += -frtti
APP_CPPFLAGS += -fexceptions
APP_CPPFLAGS += -DDEBUG
APP_ABI := armeabi-v7a
APP_PLATFORM:=android-14
APP_STL := gnustl_static
APP_GNUSTL_CPP_FEATURES := rtti exceptions
NDK_TOOLCHAIN_VERSION=4.7
Run Code Online (Sandbox Code Playgroud)
这些功能实际上不起作用吗?
我将开发一个堆栈跟踪步骤到我们的win32 API平台支持,以捕获任何异常与JAVA堆栈跟踪的行为.实际上我们得到了Linux平台的全功能实现.
首先,我尝试使用win32 CaptureStackBackTrace API机制实现stackwalk.但是这个方法没有集成在mingw的实际winbase头文件中(使用MSYS/MinGW 5.1.x)...
所以我决定尝试使用dbgheader机制,遵循此链接的说明:http://sites.google.com/site/kenscode/prime-programs/boinc-with-mingw-on-win32
但我再次失败并遇到我无法解决的链接器故障.我认为MinGW无法解析dbgheader库....
DrMinGW对我来说不是一个选项,虽然它是一个JIT调试器,我要实现一个堆栈跟踪机制,用于运行时发生的任何异常,具有可定制的日志文件可跟踪性,就像我们从JAVA知道的那样......
有没有人在握手时使用win32 API运行MSYS/MinGW?我不会将编译器更改为丑陋的MVC编译器而不是使用MSYS/MinGW ...
谢谢你的任何提示.最好的祝福,
基督教
我使用CMake生成Visual Studio 2010项目和解决方案文件.实际上我可以设置不同的设置,如警告级别,增量建筑标志等.来自CMake.但我无法设置VC++目录配置选项卡中列出的其他包含和库.其实我要手动设置这些目录.这很愚蠢......
我试图设置以下CMake变量:CMAKE_INCLUDE_PATH,INCLUDE_DIRECTORY但没有发生任何事情.如果我打开项目,解决方案的附加包含目录始终为空(仅给出标准的MSVE设置).
我也厌倦了在可执行文件创建后设置这些变量,但这也没有效果.
这是我直接在cmake文件的标题中做的事情:
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(${MODULE_NAME})
IF (MSVC)
# Activate C++ exception handling
IF (NOT CMAKE_CXX_FLAGS MATCHES "/EHsc")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
ENDIF ()
# Set Warning level always to 4
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
ELSE ()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
ENDIF ()
#read path of dependency modules
file(READ "msvc.deps" MSVC_PROPERTIES)
STRING(REGEX REPLACE ";" "\\\\;" MSVC_PROPERTIES "${MSVC_PROPERTIES}")
STRING(REGEX REPLACE "\n" ";" MSVC_PROPERTIES "${MSVC_PROPERTIES}")
FOREACH(e ${MSVC_PROPERTIES})
SET(INCLUDE ${INCLUDE} ${e})
MESSAGE(STATUS "[INFO]: Value ${e}")
ENDFOREACH(e) …Run Code Online (Sandbox Code Playgroud) 对于我的本机c ++项目,我将设置预编译共享库的运行时加载,可以在启动时使用配置由客户端更改.什么是在Android上调用dlopen的正确方法?无论我做什么,dlopen永远不会打开任何共享库,如果我没有在我的Android.mk文件中将此库定义为预编译库,如下所示:
LOCAL_PATH := $(call my-dir)
LOCAL_CFLAGS += -DDEBUG
LOCAL_CFLAGS += -DANDROID
include $(CLEAR_VARS)
LOCAL_MODULE := bar
LOCAL_SRC_FILES := bar/bar.cpp
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := native_activity
LOCAL_SRC_FILES := main.cpp
LOCAL_LDLIBS := -llog
LOCAL_LDLIBS += -landroid
LOCAL_SHARED_LIBRARIES := bar
LOCAL_STATIC_LIBRARIES += android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module, android/native_app_glue)
Run Code Online (Sandbox Code Playgroud)
在我的本机活动主类中,我尝试加载库:
void* lib = dlopen("/system/lib/armeabi-v7a/libbar.so", RTLD_NOW);
if (lib == NULL) {
fprintf(stderr, "Could not dlopen(\"libbar.so\"): %s\n",
dlerror());
exit(1);
}else{
LOGI("Library successfully loaded!");
if (dlsym(lib, "bar") == NULL) {
fprintf(stderr, "Symbol …Run Code Online (Sandbox Code Playgroud) 我尝试使用gcc仪器函数与MinGW的g ++编译器,但我总是遇到链接器问题.是否可以将仪器功能与MinGW/MSYS一起使用?
链接器失败输出:
$ g++ instrumentFunctions.cpp -o iftest -finstrument-functions >> iflog.txt
C:/Users/HELLHO~1/AppData/Local/Temp/ccUwxrxt.o:instrumentFunctions.cpp:(.text+0x4e): undefined reference to `__cyg_prof
ile_func_enter'
C:/Users/HELLHO~1/AppData/Local/Temp/ccUwxrxt.o:instrumentFunctions.cpp:(.text+0x158): undefined reference to `__cyg_pro
file_func_exit'
C:/Users/HELLHO~1/AppData/Local/Temp/ccUwxrxt.o:instrumentFunctions.cpp:(.text+0x179): undefined reference to `__cyg_pro
file_func_enter'
C:/Users/HELLHO~1/AppData/Local/Temp/ccUwxrxt.o:instrumentFunctions.cpp:(.text+0x18c): undefined reference to `__cyg_pro
file_func_exit'
C:/Users/HELLHO~1/AppData/Local/Temp/ccUwxrxt.o:instrumentFunctions.cpp:(.text+0x1a7): undefined reference to `__cyg_pro
file_func_enter'
C:/Users/HELLHO~1/AppData/Local/Temp/ccUwxrxt.o:instrumentFunctions.cpp:(.text+0x1bf): undefined reference to `__cyg_pro
file_func_exit'
C:/Users/HELLHO~1/AppData/Local/Temp/ccUwxrxt.o:instrumentFunctions.cpp:(.text+0x1db): undefined reference to `__cyg_pro
file_func_enter'
C:/Users/HELLHO~1/AppData/Local/Temp/ccUwxrxt.o:instrumentFunctions.cpp:(.text+0x1f3): undefined reference to `__cyg_pro
file_func_exit'
C:/Users/HELLHO~1/AppData/Local/Temp/ccUwxrxt.o:instrumentFunctions.cpp:(.text+0x22f): undefined reference to `__cyg_pro
file_func_enter'
C:/Users/HELLHO~1/AppData/Local/Temp/ccUwxrxt.o:instrumentFunctions.cpp:(.text+0x27a): undefined reference to `__cyg_pro
file_func_exit'
C:/Users/HELLHO~1/AppData/Local/Temp/ccUwxrxt.o:instrumentFunctions.cpp:(.text+0x29b): undefined reference to `__cyg_pro
file_func_enter'
C:/Users/HELLHO~1/AppData/Local/Temp/ccUwxrxt.o:instrumentFunctions.cpp:(.text+0x2e4): undefined reference …Run Code Online (Sandbox Code Playgroud)