Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ &引用;“无输入文件”;使用Android NDK r6b的gcc构建时_C++_Windows_Gcc_Android Ndk_Cygwin - Fatal编程技术网

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 )