android复制代码时很多错误,Android构建系统。 本地图书馆。 编译时出现很多代码错误...

我有一个本机库,通过我的Android应用程序中的ndk工作正常。 现在我需要用这个库编译android。 但是在尝试这样做时我遇到了一些神秘的错误。

target thumb C++: md5b <= external/libmd5b/jni/md5b.cpp

target thumb C++: md5b <= external/libmd5b/jni/md5.cpp

external/libmd5b/jni/md5b.cpp:2:18: error: string: No such file or directory

external/libmd5b/jni/md5b.cpp:3:20: error: iostream: No such file or directory

external/libmd5b/jni/md5b.cpp:4:19: error: fstream: No such file or directory

In file included from external/libmd5b/jni/md5.cpp:2:

external/libmd5b/jni/md5.h:5:20: error: iostream: No such file or directory

external/libmd5b/jni/md5.cpp:6:18: error: string: No such file or directory

In file included from external/libmd5b/jni/md5b.cpp:6:

external/libmd5b/jni/md5.h:23: error: expected unqualified-id before '&' token

external/libmd5b/jni/md5.h:23: error: expected ')' before '&' token

external/libmd5b/jni/md5.h:23: error: expected ';' before '&' token

external/libmd5b/jni/md5.h:27: error: 'string' in namespace 'std' does not name a type

external/libmd5b/jni/md5.h:28: error: ISO C++ forbids declaration of 'ostream' with no type

external/libmd5b/jni/md5.h:28: error: 'ostream' is neither function nor member function; cannot be declared friend

external/libmd5b/jni/md5.h:28: error: expected ';' before '&' token

external/libmd5b/jni/md5.h:58: error: 'string' in namespace 'std' does not name a type

external/libmd5b/jni/md5b.cpp: In function '_jstring* Md5B(JNIEnv*, _jobject*, _jstring*)':

external/libmd5b/jni/md5b.cpp:18: error: 'string' is not a member of 'std'

external/libmd5b/jni/md5b.cpp:18: error: expected ';' before 'strpath'

external/libmd5b/jni/md5b.cpp:19: error: 'ifstream' was not declared in this scope

external/libmd5b/jni/md5b.cpp:19: error: expected ';' before 'inFile'

external/libmd5b/jni/md5b.cpp:20: error: 'inFile' was not declared in this scope

external/libmd5b/jni/md5b.cpp:20: error: 'strpath' was not declared in this scope

external/libmd5b/jni/md5b.cpp:21: error: 'string' is not a member of 'std'

external/libmd5b/jni/md5b.cpp:21: error: expected ';' before 'line'

external/libmd5b/jni/md5b.cpp:22: error: 'string' is not a member of 'std'

external/libmd5b/jni/md5b.cpp:22: error: expected ';' before 'strFile'

external/libmd5b/jni/md5b.cpp:25: error: 'line' was not declared in this scope

external/libmd5b/jni/md5b.cpp:25: error: 'getline' was not declared in this scope

external/libmd5b/jni/md5b.cpp:26: error: 'strFile' was not declared in this scope

external/libmd5b/jni/md5b.cpp:29: error: 'string' is not a member of 'std'

external/libmd5b/jni/md5b.cpp:29: error: expected ';' before 'md5R'

external/libmd5b/jni/md5b.cpp:30: error: 'md5R' was not declared in this scope

make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/md5b_intermediates/md5b.o] Error 1

make: *** Waiting for unfinished jobs....

In file included from external/libmd5b/jni/md5.cpp:2:

external/libmd5b/jni/md5.h:23: error: expected unqualified-id before '&' token

external/libmd5b/jni/md5.h:23: error: expected ')' before '&' token

external/libmd5b/jni/md5.h:23: error: expected ';' before '&' token

external/libmd5b/jni/md5.h:27: error: 'string' in namespace 'std' does not name a type

external/libmd5b/jni/md5.h:28: error: ISO C++ forbids declaration of 'ostream' with no type

external/libmd5b/jni/md5.h:28: error: 'ostream' is neither function nor member function; cannot be declared friend

external/libmd5b/jni/md5.h:28: error: expected ';' before '&' token

external/libmd5b/jni/md5.h:58: error: 'string' in namespace 'std' does not name a type

external/libmd5b/jni/md5.cpp:79: error: expected unqualified-id before '&' token

external/libmd5b/jni/md5.cpp:79: error: expected ')' before '&' token

external/libmd5b/jni/md5.cpp:79: error: expected initializer before '&' token

external/libmd5b/jni/md5.cpp:303: error: 'string' in namespace 'std' does not name a type

external/libmd5b/jni/md5.cpp:318: error: expected constructor, destructor, or type conversion before '&' token

external/libmd5b/jni/md5.cpp:325: error: 'string' in namespace 'std' does not name a type

make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/md5b_intermediates/md5.o] Error 1

看起来我的代码中有错误,但我确信相反,因为相同的代码在我的应用程序中运行良好。

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_CFLAGS := -fPIC

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib

LOCAL_MODULE := md5b

LOCAL_SRC_FILES := md5b.cpp md5.cpp

LOCAL_MODULE_TAGS := optional

include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_STL:=stlport_static

APP_MODULES := md5b

./build/target/product/full.mk的一部分

PRODUCT_PACKAGES := \

Camera \

libmd5b

md5b.cpp

#include

#include

#include

#include

#include

#include"md5.h"

using namespace std;

extern"C" {

JNIEXPORT jstring JNICALL Md5B //This function named without aplication_activity_etc because it should be visible system wide. Is it right syntax?

(JNIEnv * env, jobject obj, jstring fpath);

};

JNIEXPORT jstring JNICALL Md5B

(JNIEnv * env, jobject obj, jstring fpath)

{

std::string strpath = env->GetStringUTFChars(fpath, NULL);

ifstream inFile;

inFile.open(strpath.c_str());

std::string line;

std::string strFile;

while (!inFile.eof())

{

getline(inFile, line);

strFile += line;

}

inFile.close();

std::string md5R = md5(strFile);

char* chmd5R = new char [md5R.length()];

strcpy (chmd5R, md5R.c_str());

return env->NewStringUTF(chmd5R);

}

在这里,您可以检查其他库文件:md5.cpp和md5.h.

我错过了什么以及如何解决它?

在Android构建树(而不是NDK)中构建本机代码时,您没有自动STL支持。 您必须手动添加STL标头和库,例如

LOCAL_STATIC_LIBRARIES += libstlport_static

LOCAL_C_INCLUDES += external/stlport/stlport bionic/ bionic/libstdc++/include

我在我的Android.mk行添加如下:LOCAL_STATIC_LIBRARIES + = libstlport_static libstdc ++ libm libc但仍然有相同的错误。

你还需要LOCAL_C_INCLUDES中的STL标题,抱歉我没有明确提到这一点。

是。 图书馆已按您的方式编制。 没有错误也没有警告。 但是当我在/ system / lib中找不到它时我很困惑。 然而,它应该是另一个问题。 非常感谢你。

这有助于我轻松开始使用std字符串。

我创建了Application.mk并添加了唯一的一行:

APP_STL := stlport_static

然后我将#include添加到我的CPP文件并使用std::string s("Lorem");创建了字符串,因为using namespace被认为是一种不好的做法。

为什么"使用命名空间std;"被认为是不好的做法?

C ++:关于使用命名空间std和cout的问题[重复]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值