1

cygwin 中的 gcc 编译器无法从除 /bin 之外的任何文件夹正确执行(放弃?)。例如,尝试从 /bin 编译我的代码是可行的,但是从 /bin/myprogram 使用详细选项我从编译器收到以下消息:

gcc version 4.5.3 (GCC)
COLLECT_GCC_OPTIONS='-O' '-ansi' '-v' '-c' '-mtune=generic' '-march=i686'
 /usr/lib/gcc/i686-pc-cygwin/4.5.3/cc1.exe -quiet -v -D__CYGWIN32__ -D__CYGWIN__ -D__unix__ -D__unix -idirafter /usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../include/w32api -idirafter /usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/lib/../../include/w32api sb.c -quiet -dumpbase sb.c -mtune=generic -march=i686 -ansi -auxbase sb -O -ansi -version -o /tmp/ccyhmnJp.s
Makefile:101: recipe for target `sb.o' failed
make: *** [sb.o] Error 1

其他人报告了类似的问题:

http://cygwin.com/ml/cygwin/2010-01/msg00939.html

解决方案似乎是修改路径,尽管“从路径中删除 X”听起来像是临时(和奇怪)的解决方法,而不是永久解决方案,而且我不知道要删除什么。不管我从 /bin 和 /bin/myprogram (我想在其中编译)运行 cygcheck。输出如下。

来自 /bin:

$ cygcheck /usr/lib/gcc/i686-pc-cygwin/4.5.3/cc1.exe
C:\cygwin\lib\gcc\i686-pc-cygwin\4.5.3\cc1.exe
  C:\cygwin\bin\cygcloog-0.dll
    C:\cygwin\bin\cygwin1.dll
      C:\WINDOWS\system32\KERNEL32.dll
        C:\WINDOWS\system32\ntdll.dll
    C:\cygwin\bin\cyggmp-10.dll
    C:\cygwin\bin\cygppl_c-4.dll
      C:\cygwin\bin\cygppl-9.dll
        C:\cygwin\bin\cyggcc_s-1.dll
        C:\cygwin\bin\cygstdc++-6.dll
        C:\cygwin\bin\cyggmpxx-4.dll
      C:\cygwin\bin\cygpwl-5.dll
  C:\cygwin\bin\cyggmp-3.dll
  C:\cygwin\bin\cygiconv-2.dll
  C:\cygwin\bin\cygintl-8.dll
  C:\cygwin\bin\cygmpc-1.dll
    C:\cygwin\bin\cygmpfr-1.dll
  C:\cygwin\bin\cygmpfr-4.dll
  C:\cygwin\bin\cygppl_c-2.dll
    C:\cygwin\bin\cygppl-7.dll
  C:\cygwin\bin\cygz.dll

从 /bin/myprogram:

$ cygcheck /usr/lib/gcc/i686-pc-cygwin/4.5.3/cc1.exe
C:\cygwin\lib\gcc\i686-pc-cygwin\4.5.3\cc1.exe
  C:\cygwin\bin\cygcloog-0.dll
    C:\cygwin\usr\local\bin\cygwin1.dll
      C:\WINDOWS\system32\ADVAPI32.DLL
        C:\WINDOWS\system32\KERNEL32.dll
          C:\WINDOWS\system32\ntdll.dll
        C:\WINDOWS\system32\RPCRT4.dll
          C:\WINDOWS\system32\Secur32.dll
    C:\cygwin\bin\cyggmp-10.dll
    C:\cygwin\bin\cygppl_c-4.dll
      C:\cygwin\bin\cygppl-9.dll
        C:\cygwin\bin\cyggcc_s-1.dll
        C:\cygwin\bin\cygstdc++-6.dll
        C:\cygwin\bin\cyggmpxx-4.dll
      C:\cygwin\bin\cygpwl-5.dll
  C:\cygwin\bin\cyggmp-3.dll
  C:\cygwin\bin\cygiconv-2.dll
  C:\cygwin\bin\cygintl-8.dll
  C:\cygwin\bin\cygmpc-1.dll
    C:\cygwin\bin\cygmpfr-1.dll
  C:\cygwin\bin\cygmpfr-4.dll
  C:\cygwin\bin\cygppl_c-2.dll
    C:\cygwin\bin\cygppl-7.dll
  C:\cygwin\usr\local\bin\cygz.dll

有一些明显的差异,但我不确定这些是什么意思。

我系统上的路径返回:

$ $PATH
-bash: /usr/local/bin:/usr/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:                                                         /cygdrive/c/WINDOWS/System32/Wbem:/cygdrive/c/ProgramFiles/ImageMagick-6.8.6-Q16                                                         :/cygdrive/c/Ruby193/bin:/cygdrive/c/Program: No such file or directory

问题是,我现在该怎么办?如果答案是更改路径变量,应该删除什么?路径变量是存储在 bash 资源文件之一中还是必须从命令行进行更改?非常感谢!

4

1 回答 1

1

您有多种选择。问题是错误的/usr/local/bin/cygz.dll

要么删除你的流氓/usr/local/bin/cygz.dll(首选),要么修复你的 PATH

$ export PATH=/usr/bin:/usr/local/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS

解释:

在 Windows 上,库搜索路径.之前具有$PATH. 所以当你在/bin正确的时候cygz.dll就会被发现。否则,将首先找到您路径中损坏的路径。

于 2013-07-13T23:02:57.143 回答