我正在使用 Eclipse + NDK (r8d) 在 UI 后面编写一个带有一些 C++ 代码的 Adroid 应用程序。我有一些我认为是万无一失的代码,但编译器只是给我一些奇怪的错误,比如没有具体细节的“无效参数”。这是我的 C++ 代码的样子:
#include <jni.h>
#include <string>
using namespace std;
#include "../../Evaluator.Engine/Evaluator.Engine.h"
Evaluator evaluator;
extern "C" {
JNIEXPORT jstring JNICALL Java_haskellevaluator_android_MainActivity_evaluateNative(JNIEnv *env, jobject, jstring jInput)
{
...
string sInput(L"Hello world");
string sResult = evaluator.evaluate(sInput);
jstring jResult = env->NewStringUTF(sResult.data());
return jResult;
}
}
Evaluator.Engine.h 没什么特别的,只是类 Evaluator 的声明。
#include <string>
using namespace std;
class Evaluator
{
public:
string evaluate(string input);
};
但是,编译器会报错:
Invalid arguments '
Candidates are:
? evaluate(?)
'
好像字符串没有定义。但是,如果我将头文件的拷贝放在同一个文件夹下,错误就会消失。这是一个 Windows 框。我试过使用\并转义\\作为路径分隔符,但没有用。
这听起来像是 NDK(或它使用的任何预处理器)错误吗?我不想移动头文件,因为它会被其他项目共享。我也讨厌保留同一个文件的 2 个拷贝。
有什么想法吗?谢谢。
最佳答案
抱歉,我没有 Windows 操作系统,但我试过你在 MacOS 上编写代码,但它不起作用,因为:
string sInput(L"Hello world");
说wchar_t不能放在std::string上。有没有可能是同样的问题?
关于android - NDK 无法处理带有相对路径的#include?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24462638/