为什么NDK(android-ndk-r5b)编译总是找不到头文件

warpo 2011-05-26 02:54:46
我的Cygwin下的NDK环境配好了,并可以成功编译ndk目录下的sample目录下的例子并生成.so文件.

我的warpo_test_SKiaView.cpp内容如下:

#include "warpo_test_SKiaView.h"
#include "SkCanvas.h"
#include "SkPaint.h"
#include "SkGraphics.h"
#include "SkColor.h"
#include "SkTypes.h"
#include "GraphicsJNI.h"

JNIEXPORT jint JNICALL Java_warpo_test_SKiaView_renderHello
(JNIEnv *env, jobject thizz, jobject canvas)
{
SkCanvas* canv = GraphicsJNI::getNativeCanvas(env, canvas);
if (!canv)
{
return 0;
}
SkPaint paint;
paint.setColor(SK_ColorRED);
canv->drawText("hello skia", 10, 20, 20, paint);

return 1;
}

我的SKIA源代码在\Cygwin\home\Android\external\skia\include\core下面.比如里面有SkCanvas.h,SkBitmap.h文件等.
我的Android.mk文件内容如下:
# Android.mk by warpo, 20110526

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

MY_ANDROID_SOURCE:=/home/Android

LOCAL_MODULE:=skiajni

LOCAL_CPP_EXTENSION:=.cpp

LOCAL_SRC_FILES:=warpo_test_SKiaView.cpp

LOCAL_CPPFLAGS:= \
-I $(MY_ANDROID_SOURCE)/frameworks/base/core/jni/android/graphics \
-I $(MY_ANDROID_SOURCE)/external/skia/include/core \
-I $(MY_ANDROID_SOURCE)/external/skia/include/images \
-I $(MY_ANDROID_SOURCE)/frameworks/base/include \
-I $(MY_ANDROID_SOURCE)/system/core/include

LOCAL_LDLIBS := -llog -lsgl -landroid_runtime -L/home/Android/out/skia/lib

include $(BUILD_SHARED_LIBRARY)



我的make版本如下:
$ make -v
GNU Make 3.81

但是$NDK/ndk-build后的结果是:
Administrator@CHINA-WARPO /cygdrive/e/android-ndk-r5b/samples/SKiaTest
$ $NDK/ndk-build
Compile++ thumb : skiajni <= warpo_test_SKiaView.cpp
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:2:22: error: SkCanvas.h: No such file or directory
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:3:21: error: SkPaint.h: No such file or directory
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:4:24: error: SkGraphics.h: No such file or directory
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:5:21: error: SkColor.h: No such file or directory
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:6:21: error: SkTypes.h: No such file or directory
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:7:25: error: GraphicsJNI.h: No such file or directory
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp: In function 'jint Java_warpo_test_SKiaView_renderHello
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:12: error: 'SkCanvas' was not declared in this scope
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:12: error: 'canv' was not declared in this scope
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:12: error: 'GraphicsJNI' has not been declared
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:17: error: 'SkPaint' was not declared in this scope
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:17: error: expected ';' before 'paint'
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:18: error: 'paint' was not declared in this scope
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:18: error: 'SK_ColorRED' was not declared in this scope
make: *** [/cygdrive/e/android-ndk-r5b/samples/SKiaTest/obj/local/armeabi/objs/skiajni/warpo_test_SKiaView.o] Error 1


请教为什么找不到头文件呢.是Android.mk文件里的错吗.如果我把这些头文件放到Android.mk文件所在目录中就能找到了.
请问是什么原因呢?
...全文
1636 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
keexiao 2012-11-13
  • 打赏
  • 举报
回复
嗯,在windows下编译android源码非常麻烦,所以,你能把编译好的sk头文件和库发给我吧,谢谢 我的邮箱是:870604369@qq.com
denniscxl 2011-08-06
  • 打赏
  • 举报
回复
你好,能把你整理好的SK头文件 和 库 发给我麽?谢谢了。qq396031521@.com
warpo 2011-05-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yiyaaixuexi 的回复:]
引用 1 楼 warpo 的回复:
晕,自己解决了.
原来是路径中带了空格.我的源码放在C:\Program Files\***\Android 下了.
Program Files这个名称含有空格.

希望以后的make编译器改进.

……


放在C:\Program Files\ 不是明智的选择
[/Quote]

最好也不要带中文的.
warpo 2011-05-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kechanghe0705 的回复:]
ndk开发需要懂make file文件的写法,在windows 下写C编译器做好了链接工作,但是ndk下属于linux下开发,则需要自己写各个链接的功能,这个链接功能文件就叫makefile文件
[/Quote]
是啊,要懂Linux下的编译就好办了.我还是菜鸟.真是被编译器的这些语法规则纠结了.
warpo 2011-05-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xqhrs232 的回复:]
想问个问题啊!你的CPP编译环境怎么搭建的?我怎么老不成功啊!我编译C的环境是没问题的。

怎么定位用C++编译器来编译?
[/Quote]
我是在Windows下用Cygwin搭建的NDK环境啊.你是怎么方式的?
xqhrs232 2011-05-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 warpo 的回复:]
引用 10 楼 xqhrs232 的回复:
引用 7 楼 warpo 的回复:
引用 6 楼 xqhrs232 的回复:
想问个问题啊!你的CPP编译环境怎么搭建的?我怎么老不成功啊!我编译C的环境是没问题的。

怎么定位用C++编译器来编译?

我是在Windows下用Cygwin搭建的NDK环境啊.你是怎么方式的?


我也是,我的C编译没问题,但把C文件修改为CPP文件后……
[/Quote]

这些我都试可,查了半天网,网上说因为出现了莫名的字符什么的.换成C却又不会,怪哉!
warpo 2011-05-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xqhrs232 的回复:]
引用 7 楼 warpo 的回复:
引用 6 楼 xqhrs232 的回复:
想问个问题啊!你的CPP编译环境怎么搭建的?我怎么老不成功啊!我编译C的环境是没问题的。

怎么定位用C++编译器来编译?

我是在Windows下用Cygwin搭建的NDK环境啊.你是怎么方式的?


我也是,我的C编译没问题,但把C文件修改为CPP文件后缀就报很多莫名的成为-----error st……
[/Quote]

尝试在MK中加入
LOCAL_CPP_EXTENSION:=.cpp

还有CPP文件好像最好不要直接改名.
因为JNI是用C方式调用的.所以改成CPP后最好也要用
extern "C" {
}
把你的CPP代码括起来.
xqhrs232 2011-05-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 warpo 的回复:]
引用 6 楼 xqhrs232 的回复:
想问个问题啊!你的CPP编译环境怎么搭建的?我怎么老不成功啊!我编译C的环境是没问题的。

怎么定位用C++编译器来编译?

我是在Windows下用Cygwin搭建的NDK环境啊.你是怎么方式的?
[/Quote]

我也是,我的C编译没问题,但把C文件修改为CPP文件后缀就报很多莫名的成为-----error stray '\24' in program的错误,看不明白是个什么原因。
xqhrs232 2011-05-27
  • 打赏
  • 举报
回复
想问个问题啊!你的CPP编译环境怎么搭建的?我怎么老不成功啊!我编译C的环境是没问题的。

怎么定位用C++编译器来编译?
j_f0001 2011-05-27
  • 打赏
  • 举报
回复
ndk开发需要懂make file文件的写法,在windows 下写C编译器做好了链接工作,但是ndk下属于linux下开发,则需要自己写各个链接的功能,这个链接功能文件就叫makefile文件
xqhrs232 2011-05-27
  • 打赏
  • 举报
回复
很关注,你这个是在NDK下使用SKIA这些底层接口对吧?这样用才能发挥ANDROID的技术啊!
要不然NDK压根就没ANDROID的框架技术了!!!
念茜 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 warpo 的回复:]
晕,自己解决了.
原来是路径中带了空格.我的源码放在C:\Program Files\***\Android 下了.
Program Files这个名称含有空格.

希望以后的make编译器改进.
[/Quote]
……


放在C:\Program Files\ 不是明智的选择
warpo 2011-05-26
  • 打赏
  • 举报
回复
晕,自己解决了.
原来是路径中带了空格.我的源码放在C:\Program Files\***\Android 下了.
Program Files这个名称含有空格.

希望以后的make编译器改进.

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧