Can';t编译现有的C++;Android Studio中的源代码
我想在安卓系统中使用,所以,我遵循,我认为我应该做什么,以使用它是Can';t编译现有的C++;Android Studio中的源代码,android,c++,android-studio,android-ndk,Android,C++,Android Studio,Android Ndk,我想在安卓系统中使用,所以,我遵循,我认为我应该做什么,以使用它是 通过NDK在Android Studio中编译源代码 使用Swig生成Java包装类 所以,我安装了NDK,并遵循和设置了Android Studio进行编译 这是在模块的build.gradle android.ndk { moduleName = "MeCab" stl = "stlport_shared" } 当我编译(生成项目)之后,报告了很多错误,几乎所有的错误都是错误:“xxx”没有被声明和一些错误
build.gradle
android.ndk {
moduleName = "MeCab"
stl = "stlport_shared"
}
当我编译(生成项目)之后,报告了很多错误,几乎所有的错误都是错误:“xxx”没有被声明和一些错误:。。。类型不完整
我认为这是因为#ifdef HAVE*
根本不起作用,所以我尝试删除#ifdef HAVE*
并直接包含头文件,然后编译以查看是否修复了错误
结果是,我直接将
,
加入,
加入,
加入和
加入(我可能会忘记一些),并且每个错误:“xxx”都没有被声明和错误:。。。不完整的类型将不会再次显示。
第一个问题:我是否使用了正确的解决方案来修复它?
与上述错误一起报告的其他错误为
在错误中,未在此范围内声明:“DIC_版本”
在错误中,未在此范围内声明“包”
,并且错误:未在此范围内声明“版本”
在错误中,未在此范围内声明“版本”
并且在错误中:“MECAB\u DEFAULT\u RC”未在此范围内声明
我在中找到了这些变量,在中找到了值为的变量,但我不知道这些文件与源代码中的变量有何关联。
第二个问题:如何修复这些错误?
最后一个错误未在Gradle Build消息中报告,但在中用红线下划线
在const T*end()const{return text+size();}
中的size()
中,所说的非常量函数“size()”是从常量函数调用的,我认为这似乎是我们无法从C#中的静态上下文引用实例字段,但在这种情况下,我应该如何修复它?**我认为这不是作者的错误。
我不知道这是不是一个有用的信息,是吗
要求
C++编译器(g++3.4.3或vc7)
-iconv(libiconv):用于转换字典
安装
它可以按照与通用自由软件相同的步骤安装
%tar zxfv mecab-X.X.tar.gz
% cd mecab-X.X
% ./configure
% make
% make check
% su
# make install
字典安装
% tar zxfv mecab-ipadic-2.7.0-XXXX.tar.gz
% mecab-ipadic-2.7.0-XXXX
% ./configure
% make
% su
# make install
如何从
Unix
% cc -O2 `mecab-config --cflags` example.c -o example \
`mecab-config --libs`
Windows
要编译副本,请包括\mecab.h、bin\libmecab.dll>lib\libmecab.lib
cygwin/mingw环境
% gcc -DDLL_IMPORT -I. example.c -o example.exe libmecab.dll
% cl -DDLL_IMPORT -I. example.c libmecab.lib
VC++环境
% gcc -DDLL_IMPORT -I. example.c -o example.exe libmecab.dll
% cl -DDLL_IMPORT -I. example.c libmecab.lib
我使用的是Windows 10、Android Studio 1.4、NDK r10e当然,Mmap::size()
应该声明为const
。如果其他编译器没有标记这一点,那是他们的问题,而不是NDK的问题。@AlexCohn I将Mmap::size()
声明为const
,现在下划线错误消失了。但是我仍然不明白Mmap::size()
是否应该是常量,作者和其他人如何编译它(不在Android Studio中),尽管我没有尝试在Android Studio之外编译它。有些编译器可能不那么严格,或者足够聪明,可以理解size()不会改变对象,或者他们可以接受一个标志来忽略这类错误