在Microsoft Visual Studio 2010中,可以创建具有多个项目的解决方案,并在项目之间设置依赖关系。我试图弄清楚是否可以通过NDK使用Eclipse完成同样的事情。更具体地说,我想知道是否可以在普通的Android项目中创建C源文件,该项目可以引用Android库项目中的C头文件。
例如:
Android library project: Sockets
Ordinary Android project: Socket_Server
Sockets contains all the C header/source files that are needed to do socket I/O.
Socket_Server contains test code that makes calls to the functions that are defined in Sockets library project. This test code requires a header file that contains the function declaration of all API calls.
我已经通过以下方式设置了项目之间的库依赖关系:
Properties > Android > Library > Add
在Socket_Server中,有一个名为SocketTestServer.cpp的文件。它包含测试代码,但是对库项目,套接字进行API调用,并通过#include“Nv_Socket.h”来实现,它不是Socket_Server的一部分:
jni/SocketTestServer.cpp:1:23: fatal error: Nv_Socket.h: No such file or directory
compilation terminated.
答案 0 :(得分:0)
我想我解决了。如果您创建一个.so文件,将它放在/ jni文件夹中,然后在.mk文件中引用它,那么编译时应该没有问题。
.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Turn on C++ Exception handling
LOCAL_CPP_FEATURES += exceptions
LOCAL_CPPFLAGS += -fexceptions
# Load LogCat utility
LOCAL_LDLIBS := -llog
# C flags
LOCAL_CFLAGS += -Wno-psabi -fpermissive
# Module name
LOCAL_MODULE := ServerSockets
# C Header includes
LOCAL_C_INCLUDES := $(LOCAL_PATH)
# Source files
LOCAL_SRC_FILES := libSockets.so
include $(PREBUILT_SHARED_LIBRARY)
答案 1 :(得分:0)
请参阅http://www.kandroid.org/ndk/docs/IMPORT-MODULE.html和http://www.kandroid.org/ndk/docs/PREBUILTS.html。诀窍是不必将二进制文件从一个项目复制到另一个项目!此外,使用LOCAL_EXPORT_C_INCLUDES
可以保证最新版本与
#include "Nv_Socket.h"