在Cygwin-x64上,“您select的CPU不支持x86-64指令集”错误

我试图按照这些指示在cygwin中安装openssl:我从这个站点下载了最新的tarball http://www.openssl.org/source/ ,并把它放在C:\ cygwin64 \ home中,然后运行这些来自cygwin的命令

  1. tar zxvf openssl-1.0.1e.tar.gz
  2. cd openssl-1.0.1e
  3. ./config中
  4. 使
  5. 做testing
  6. 进行安装

    (来自这里的说明: http : //www.slideshare.net/ganaaturuu/cygwinandopen-sslinstallguide )

到第三步./config它工作正常我相信,至less没有错误报告,并给出了消息“为Cygwinconfiguration”。 到底。 当我运行make虽然它给了我这个输出:

making all in crypto... make[1]: Entering directory '/home/openssl-1.0.1e/crypto' ( echo "#ifndef MK1MF_BUILD"; \ echo ' /* auto-generated by crypto/Makefile for crypto/cversion.c */'; \ echo ' #define CFLAGS "gcc -DOPENSSL_THREADS -DDSO_DLFCN -DHAVE_DLFCN_H -DTERM IOS -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall -DOPENSSL_BN_ASM_PART_ WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLP OOL_ASM -DGHASH_ASM"'; \ echo ' #define PLATFORM "Cygwin"'; \ echo " #define DATE \"`LC_ALL=C LC_TIME=C date`\""; \ echo '#endif' ) >buildinf.h gcc -I. -I.. -I../include -DOPENSSL_THREADS -DDSO_DLFCN -DHAVE_DLFCN_H -DTERMI OS -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall -DOPENSSL_BN_ASM_PART_W ORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPO OL_ASM -DGHASH_ASM -c -o cryptlib.o cryptlib.c cryptlib.c:1:0: error: CPU you selected does not support x86-64 instruction set /* crypto/cryptlib.c */ ^ cryptlib.c:1:0: error: CPU you selected does not support x86-64 instruction set <builtin>: recipe for target 'cryptlib.o' failed make[1]: *** [cryptlib.o] Error 1 make[1]: Leaving directory '/home/openssl-1.0.1e/crypto' Makefile:278: recipe for target 'build_crypto' failed make: *** [build_crypto] Error 1 

我search了“你select的CPU不支持x86-64指令集”,我认为它与CFLAGS和-march = i486选项有关,但是我不确定应该改变什么。

在这个如何编译64位机器上的64位C ++程序? 问题有一些解决schemebuild议,但在我的情况下,无法在makefile选项,如-m32和-march = i686删除。

如果可以请告诉我正确的方向来search这个,如果不是解决scheme,我将不胜感激。

我正在使用Windows 7 64位,cygwin和gcc版本4.8.2。

这是一个“我也是”的答案,因为事情有所改变。 Cygwin-x64支持在2015年5月发行 ,在3110版本中加入:添加对x86_64 Cygwin的支持 。

但是, config仍然选择要建立的库的i686版本。 另请参阅问题#4326:未能在OpenSSL错误跟踪器中配置Cygwin-x64 。

要在Cygwin-x64上构建OpenSSL 1.0.2,必须使用Configure并选择三元组。 下面是汤对坚果食谱。

 $ curl https://www.openssl.org/source/openssl-1.0.2f.tar.gz -o openssl-1.0.2f.tar.gz ... $ tar -xzf openssl-1.0.2f.tar.gz ... $ cd openssl-1.0.2f 

然后:

 $ ./Configure Cygwin-x86_64 shared no-ssl2 no-ssl3 --openssldir="$HOME/ssl" ... $ make depend ... $ make ... $ make install_sw 

install_sw安装$OPENSSLDIR/include的头文件和$OPENSSLDIR/lib 。 它不会安装手册页。

然后编译并链接到:

 $ gcc -I "$HOME/ssl/include" test.c -o test.exe "$HOME/ssl/lib/libcrypto.a" "$HOME/ssl/lib/libssl.a" 

链接到libcrypto.alibssl.a意味着你避免库路径问题。 事情将“为你工作”。


另外,如果您需要OpenSSL 1.0.1,则可以从1.0.2的Configure (从第613行)复制/粘贴三元组的设置:

 $ grep "Cygwin-x86_64" Configure "Cygwin-x86_64", "gcc:-DTERMIOS -DL_ENDIAN -O3 -Wall:::CYGWIN::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:mingw64:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a", 

如果你想config为“正常工作”为1.0.1,然后添加以下内容。 确保将Cygwin-x86_64的行添加到Configure

 x86_64-*-cygwin) OUT="Cygwin-x86_64" ;; <== Add this in front of the ones below *-*-cygwin_pre1.3) OUT="Cygwin-pre1.3" ;; *-*-cygwin) OUT="Cygwin" ;; 

似乎1.0.1不支持Cygwin / x64。

这个线程表示必要的补丁已经被拉入1.0.2分支。

这里是你可以参考的一个职位 。 基本思想是指定-march = x86-64并避免使用汇编语言。 汇编语言不像C语言那么简单。