【发布时间】:2015-01-24 08:17:20
【问题描述】:
环境
- android-ndk-r10c
- VisualGDB
- Windows x64
用例 1
- ADB Cmdline 可执行文件(无 Java / APK)由多个 C++ 文件组成
- 编译的可执行文件在 Application.mk 中具有“APP_STL := gnustl_static”
- 可执行文件已成功编译并运行
用例 2
- 用例 1 的 ADB 工具分为两个独立的项目
- 封装通用功能的静态库
- ADB 工具减去移出静态库的功能
- 可执行和静态 Lib 编译时在 Application.mk 中具有“APP_STL := gnustl_static”
- ADB Exe 编译时具有 LOCAL_LDLIBS := -L$(PATH_TO_STATIC_LIB) -lstaticlib
- 编译失败,出现“未定义的对 `std::terminate()' 的引用”链接器错误
手头的问题
将所有 CPP 文件编译为一个项目时一切正常,没有链接器错误。
当将逻辑吐出到一个瘦可执行文件和一个静态库(可执行文件链接到)中时,我得到一个“未定义的对 `std::terminate()' 的引用”链接器错误。
在我看来,尽管“APP_STL := gnustl_static”被指定,但“gnustl_static”似乎没有与可执行文件链接......
我在这里缺少什么?有什么方法可以强制“gnustl_static”链接?
参考的make文件:
Makefile,其中所有文件都属于同一可执行文件(WORKING)
应用程序.mk
APP_STL := gnustl_static
APP_ABI := all
APP_CFLAGS := -std=gnu++11
APP_CPPFLAGS := -std=gnu++11
NDK_TOOLCHAIN_VERSION := 4.9
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ScreenCapSvc
LOCAL_SRC_FILES := ScreenCapSvc.cpp SnapshotController.cpp SimpleTCPStream.cpp SocketsServer.cpp uuids.cpp
LOCAL_C_INCLUDES :=
LOCAL_STATIC_LIBRARIES :=
LOCAL_SHARED_LIBRARIES :=
LOCAL_LDLIBS := -llog
LOCAL_CFLAGS :=
LOCAL_CPPFLAGS :=
LOCAL_LDFLAGS :=
COMMON_SRC_FILES := $(LOCAL_SRC_FILES)
include $(BUILD_EXECUTABLE)
生成文件,其中文件被拆分为静态库和链接到该库的可执行文件 (不工作)
可执行应用程序.mk
APP_STL := gnustl_static
APP_ABI := all
APP_CFLAGS := -std=gnu++11
APP_CPPFLAGS := -std=gnu++11
NDK_TOOLCHAIN_VERSION := 4.9
可执行的Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ScreenCapSvc
LOCAL_SRC_FILES := ScreenCapSvc.cpp SnapshotController.cpp
LOCAL_C_INCLUDES :=
LOCAL_STATIC_LIBRARIES :=
LOCAL_SHARED_LIBRARIES :=
LOCAL_LDLIBS := -llog -L$(PATH_TO_STATIC_LIB) -lCollections_statis
LOCAL_CFLAGS :=
LOCAL_CPPFLAGS :=
LOCAL_LDFLAGS :=
COMMON_SRC_FILES := $(LOCAL_SRC_FILES)
include $(BUILD_EXECUTABLE)
静态库应用程序.mk
APP_STL := gnustl_static
APP_ABI := all
APP_CFLAGS := -std=gnu++11
APP_CPPFLAGS := -std=gnu++11
NDK_TOOLCHAIN_VERSION := 4.9
APP_MODULES := Collections-static Collections-shared
静态库 Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Collections-shared
LOCAL_SRC_FILES := SimpleTCPStream.cpp SocketsServer.cpp uuids.cpp
LOCAL_C_INCLUDES :=
LOCAL_STATIC_LIBRARIES :=
LOCAL_SHARED_LIBRARIES :=
LOCAL_LDLIBS := -llog
LOCAL_CFLAGS :=
LOCAL_CPPFLAGS :=
LOCAL_LDFLAGS :=
COMMON_SRC_FILES := $(LOCAL_SRC_FILES)
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := Collections-static
LOCAL_SRC_FILES := $(COMMON_SRC_FILES)
include $(BUILD_STATIC_LIBRARY)
【问题讨论】:
标签: android makefile android-ndk