C++ &引用;“无输入文件”;使用Android NDK r6b的gcc构建时
从纽约度假回来后,我在建设项目时遇到了一个奇怪的问题,我以前从未遇到过类似的问题。C++ &引用;“无输入文件”;使用Android NDK r6b的gcc构建时,c++,windows,gcc,android-ndk,cygwin,C++,Windows,Gcc,Android Ndk,Cygwin,从纽约度假回来后,我在建设项目时遇到了一个奇怪的问题,我以前从未遇到过类似的问题。 每个项目都是使用gcc交叉编译器(cygwin)使用NDK 6b构建的Android共享/静态库或应用程序。 操作系统是Windows 7(32位),我还没有安装/卸载/重新安装任何相关软件(节假日:) 我尝试构建标准NDK示例hello jni-出现相同错误。 日志: 我知道Windows上的cygwin不支持符号链接-目录树中没有符号链接。 没有残忍的杀毒软件,只有Windows Defender。 我像去年
每个项目都是使用gcc交叉编译器(cygwin)使用NDK 6b构建的Android共享/静态库或应用程序。
操作系统是Windows 7(32位),我还没有安装/卸载/重新安装任何相关软件(节假日:) 我尝试构建标准NDK示例
hello jni
-出现相同错误。日志: 我知道Windows上的
cygwin
不支持符号链接-目录树中没有符号链接。没有残忍的杀毒软件,只有Windows Defender。
我像去年一样以普通用户的身份运行构建(即没有凭证更改) 可能有什么问题 相关问题:
- (使用类似Windows的路径似乎是问题的根源)
- (好吧,我所有的资料来源都是关于
,但我以前在这方面没有问题,而且CR+LF
包含hello jni.c
)LF
- (Windows/Unix路径的问题,但似乎特定于ffmpeg)
[更新]进程监视器显示交叉编译器试图访问“错误路径”:
E:\cygdrive\E\Users\A.Kravtsov.SURC\Devel\hello jni\jni\hello jni.c
。我想知道这个工具以前是如何工作的
我一挖出来,就会提供更多信息:)
[更新#2]在另一台安装了几乎相同工具集(Cygwin、Android NDK的同一版本)的PC(Windows XP 32位)上,日志看起来不同:
Compile thumb : hello-jni <= hello-jni.c
/cygdrive/c/dev/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-gcc -MMD -MP -MF E:/Users/A.User.SURC/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d.org -fpic -ffunction-sections -funwind-tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -IE:/Users/A.User.SURC/Devel/hello-jni/jni -DANDROID -Wa,--noexecstack -O0 -g -IC:/dev/android-ndk-r6b/platforms/android-8/arch-arm/usr/include -c E:/Users/A.User.SURC/Devel/hello-jni/jni/hello-jni.c -o E:/Users/A.User.SURC/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o && ( if [ -f "E:/Users/A.User.SURC/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d.org" ]; then awk -f /cygdrive/c/dev/android-ndk-r6b/build/awk/convert-deps-to-cygwin.awk E:/Users/A.User.SURC/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d.org > E:/Users/A.User.SURC/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d && rm -f E:/Users/A.User.SURC/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d.org; fi )
Compile thumb:hello jni E:/Users/A.User.SURC/Devel/hello jni/obj/local/armeabi/objs debug/hello jni/hello jni.o.d&&rm-f E:/Users/A.User.SURC/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d.org;fi)
由于某些不清楚的原因,gcc
在这里提供了Windows风格的路径。。。这就是过程应该如何相互作用。所以现在的问题是如何指示cygwin/NDK传递正确的路径?源代码文件是否位于正确的目录中?检查错误消息中打印的路径。c/c++源文件必须位于jni子目录中,而不是src子目录中 另外,不确定这是否有帮助,最新的SDK/NDK版本应该支持Windows本机批处理文件。不再需要Cygwin(尽管仍然缺乏调试支持)。尝试从运行
ndk build
的windows命令行生成
另外,以前是否也进行过相同的设置(在具有相同文件/目录的同一台计算机上)?我终于用
ndk build
找到了电脑出现问题的原因 简言之:这是由cygwin的
mount
和mount.exe
之间的冲突造成的,这是“NFS客户端”功能的一部分(我最近确实与Telnet Client一起安装了它)
更多信息
我在文章“”中发现了一个类似的问题—此人遇到了NDK包含路径的问题,他通过修改脚本解决了这个问题。此提示帮助我在NDK中找到相应的脚本
gen windows host path.awk
,该脚本执行路径转换(从cygwin样式到windows)。它依赖于
mount
,在调用时不带参数列出所有驱动器。结果是,我的电脑上的
mount
没有看到任何驱动器。。。因为它是来自Windows的/cygdrive/c/Windows/system32/
处的mount.exe,而不是来自Cygwin的/usr/bin/mount
。
默认情况下,Windows中不存在mount.exe
,如果是这种情况,则可能已安装“NFS客户端”。
因此解决方案(实际上是一种解决办法)是从Windows卸载“NFS客户端”功能文件的完整路径是E:\Users\a.User.ORG\Devel\hello jni\jni\hello jni.c
,因此它存在,并可通过/cygdrive/E/Users/a.User.ORG/Devel/hello jni/jni/hello jni.c
访问(另请参阅我问题中的更新)。不幸的是,它不是更新SDK/NDK的选项,因为该项目没有处于适当的阶段。并且NDK构建
(在实际项目中)通过依赖cygwin的bash脚本调用。从Windows命令行运行ndk build
不起作用,因为此工具无法找到“兼容的GNU make”(我相信,这是ndk 6b的问题)。缺少的make可以通过安装MinGW,然后将其bin dir添加到PATH中来解决(可能需要从“make”到“mingw32 make”的符号链接)。您是否能够从cygwin打开c文件,例如,使用“cat hello jni.c”打印?编辑:只需阅读您的更新。您是否在cygwin中设置了环境变量?它可能使用windows环境中使用本机路径的变量?非常感谢您尝试帮助我解决此问题!是的,我知道M中还有另一个make
inGW。总有一天我会仔细研究一下……到目前为止,我有兴趣让我基于cygwin的系统回到正轨。我已经找到了问题的原因-看。啊,非常有趣。奇怪的是,它不是使用绝对路径来调用的。可能在新版本中得到修复。如果不是,你应该给他们写一份错误报告单。
A.User@A-User-L ~/Devel/hello-jni
$ ndk-build V=1
rm -f /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/libs/armeabi/lib*.so /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/libs/armeabi-v7a/lib*.so /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/libs/x86/lib*.so
rm -f /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/libs/armeabi/gdbserver /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/libs/armeabi-v7a/gdbserver /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/libs/x86/gdbserver
rm -f /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/libs/armeabi/gdb.setup /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/libs/armeabi-v7a/gdb.setup /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/libs/x86/gdb.setup
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
mkdir -p /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/libs/armeabi
install -p /cygdrive/c/dev/Android/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/gdbserver /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
mkdir -p /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/libs/armeabi
echo "set solib-search-path /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/obj/local/armeabi" > /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/libs/armeabi/gdb.setup
echo "directory /cygdrive/c/dev/Android/android-ndk-r6b/platforms/android-8/arch-arm/usr/include /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/jni /cygdrive/c/dev/Android/android-ndk-r6b/sources/cxx-stl/system" >> /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/libs/armeabi/gdb.setup
Compile thumb : hello-jni <= hello-jni.c
/cygdrive/c/dev/Android/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-gcc -MMD -MP -MF /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d.org -fpic -ffunction-sections -funwind-tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -I/cygdrive/e/Users/A.User.ORG/Devel/hello-jni/jni -DANDROID -Wa,--noexecstack -O0 -g -I/cygdrive/c/dev/Android/android-ndk-r6b/platforms/android-8/arch-arm/usr/include -c /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/jni/hello-jni.c -o /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o && ( if [ -f "/cygdrive/e/Users/A.User.ORG/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d.org" ]; then awk -f /cygdrive/c/dev/Android/android-ndk-r6b/build/awk/convert-deps-to-cygwin.awk /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d.org > /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d && rm -f /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d.org; fi )
/cygdrive/c/dev/Android/android-ndk-r6b/build/core/build-binary.mk:217: recipe for target `/cygdrive/e/Users/A.User.ORG/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o' failed
arm-linux-androideabi-gcc.exe: /cygdrive/e/Users/A.User.ORG/Devel/hello-jni/jni/hello-jni.c: No such file or directory
arm-linux-androideabi-gcc.exe: no input files
make: *** [/cygdrive/e/Users/A.User.ORG/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o] Error 1
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
Compile thumb : hello-jni <= hello-jni.c
/cygdrive/c/dev/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-gcc -MMD -MP -MF E:/Users/A.User.SURC/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d.org -fpic -ffunction-sections -funwind-tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -IE:/Users/A.User.SURC/Devel/hello-jni/jni -DANDROID -Wa,--noexecstack -O0 -g -IC:/dev/android-ndk-r6b/platforms/android-8/arch-arm/usr/include -c E:/Users/A.User.SURC/Devel/hello-jni/jni/hello-jni.c -o E:/Users/A.User.SURC/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o && ( if [ -f "E:/Users/A.User.SURC/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d.org" ]; then awk -f /cygdrive/c/dev/android-ndk-r6b/build/awk/convert-deps-to-cygwin.awk E:/Users/A.User.SURC/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d.org > E:/Users/A.User.SURC/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d && rm -f E:/Users/A.User.SURC/Devel/hello-jni/obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d.org; fi )