2012-04-26 15 views
20

पर प्रोजेक्ट को इकट्ठा करते समय "ऐसा कोई निर्देश नहीं" त्रुटि मैंने जीसीसी 4.7.0 स्थापित करने के लिए होमब्री का उपयोग किया और मेरी परियोजना का निर्माण असेंबली-टाइम में विफल रहा है। मैं सफलतापूर्वक .c -> .s से कोड ले सकता हूं, लेकिन .s -> .o विफल रहता है।मैक ओएस एक्स

जीसीसी स्थापित करने के लिए प्रयुक्त ब्रू फॉर्मूला देखने के लिए, कृपया देखें: https://github.com/Homebrew/homebrew-dupes/blob/master/gcc.rb। मैंने https://github.com/mxcl/homebrew/blob/master/Library/Formula/binutils.rb का उपयोग कर अपस्ट्रीम से बिनुटिल भी स्थापित किए। स्थापित करें binutils/usr/local/lib या इसी तरह के एक नए 'as' को पेश करने के लिए प्रतीत नहीं होता है।

मैं इस लापता निर्देश त्रुटि को कैसे ट्रैक कर सकता हूं? ऐसा लगता है कि संकलक सही है लेकिन लिंकर बस इन निर्देशों का समर्थन नहीं करता है। निर्देश वेक्टर निर्देश प्रतीत होते हैं।

xavierlange $> make suricata.o 
/usr/local/bin/gcc-4.7 -DHAVE_CONFIG_H -I. -I.. -I../libhtp -I/opt/local/include -v -Wextra -Wall -fno-strict-aliasing -fno-tree-pre -Wno-unused-parameter -std=gnu99 -DOS_DARWIN -march=native -DLIBPCAP_VERSION_MAJOR=1 -DHAVE_PCAP_SET_BUFF -DUNITTESTS -DREVISION="61d5fe3" -MT suricata.o -MD -MP -MF .deps/suricata.Tpo -c -o suricata.o suricata.c 
Using built-in specs. 
COLLECT_GCC=/usr/local/bin/gcc-4.7 
Target: x86_64-apple-darwin11.3.0 
Configured with: ../configure --enable-languages=c,c++,fortran,java,objc,obj-c++ --prefix=/usr/local/Cellar/gcc/4.7.0/gcc --datarootdir=/usr/local/Cellar/gcc/4.7.0/share --bindir=/usr/local/Cellar/gcc/4.7.0/bin --program-suffix=-4.7 --with-gmp=/usr/local/Cellar/gmp/5.0.4 --with-mpfr=/usr/local/Cellar/mpfr/3.1.0 --with-mpc=/usr/local/Cellar/libmpc/0.9 --with-system-zlib --enable-stage1-checking --enable-plugin --enable-lto --disable-multilib --disable-nls 
Thread model: posix 
gcc version 4.7.0 (GCC) 
COLLECT_GCC_OPTIONS='-mmacosx-version-min=10.7.3' '-D' 'HAVE_CONFIG_H' '-I' '.' '-I' '..' '-I' '../libhtp' '-I' '/opt/local/include' '-v' '-Wextra' '-Wall' '-fno-strict-aliasing' '-fno-tree-pre' '-Wno-unused-parameter' '-std=gnu99' '-D' 'OS_DARWIN' '-march=native' '-D' 'LIBPCAP_VERSION_MAJOR=1' '-D' 'HAVE_PCAP_SET_BUFF' '-D' 'UNITTESTS' '-D' 'REVISION=61d5fe3' '-MT' 'suricata.o' '-MD' '-MP' '-MF' '.deps/suricata.Tpo' '-c' '-o' 'suricata.o' 
/usr/local/Cellar/gcc/4.7.0/gcc/libexec/gcc/x86_64-apple-darwin11.3.0/4.7.0/cc1 -quiet -v -I . -I .. -I ../libhtp -I /opt/local/include -MD suricata.d -MF .deps/suricata.Tpo -MP -MT suricata.o -D__DYNAMIC__ -D HAVE_CONFIG_H -D OS_DARWIN -D LIBPCAP_VERSION_MAJOR=1 -D HAVE_PCAP_SET_BUFF -D UNITTESTS -D REVISION=61d5fe3 suricata.c -march=corei7-avx -mcx16 -msahf -mno-movbe -maes -mpclmul -mpopcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1 -mno-lzcnt --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=6144 -mtune=corei7-avx -fPIC -quiet -dumpbase suricata.c -mmacosx-version-min=10.7.3 -auxbase-strip suricata.o -Wextra -Wall -Wno-unused-parameter -std=gnu99 -version -fno-strict-aliasing -fno-tree-pre -o /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s 
GNU C (GCC) version 4.7.0 (x86_64-apple-darwin11.3.0) 
    compiled by GNU C version 4.7.0, GMP version 5.0.4, MPFR version 3.1.0-p8, MPC version 0.9 
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 
ignoring nonexistent directory "/usr/local/Cellar/gcc/4.7.0/gcc/lib/gcc/x86_64-apple-darwin11.3.0/4.7.0/../../../../x86_64-apple-darwin11.3.0/include" 
ignoring nonexistent directory "/opt/local/include" 
#include "..." search starts here: 
#include <...> search starts here: 
. 
.. 
../libhtp 
/usr/local/Cellar/gcc/4.7.0/gcc/lib/gcc/x86_64-apple-darwin11.3.0/4.7.0/include 
/usr/local/include 
/usr/local/Cellar/gcc/4.7.0/gcc/include 
/usr/local/Cellar/gcc/4.7.0/gcc/lib/gcc/x86_64-apple-darwin11.3.0/4.7.0/include-fixed 
/usr/include 
/System/Library/Frameworks 
/Library/Frameworks 
End of search list. 
GNU C (GCC) version 4.7.0 (x86_64-apple-darwin11.3.0) 
    compiled by GNU C version 4.7.0, GMP version 5.0.4, MPFR version 3.1.0-p8, MPC version 0.9 
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 
Compiler executable checksum: 1dbaf0f0ba4d4d18b5d0d00c3c7d024d 
COLLECT_GCC_OPTIONS='-mmacosx-version-min=10.7.3' '-D' 'HAVE_CONFIG_H' '-I' '.' '-I' '..' '-I' '../libhtp' '-I' '/opt/local/include' '-v' '-Wextra' '-Wall' '-fno-strict-aliasing' '-fno-tree-pre' '-Wno-unused-parameter' '-std=gnu99' '-D' 'OS_DARWIN' '-march=native' '-D' 'LIBPCAP_VERSION_MAJOR=1' '-D' 'HAVE_PCAP_SET_BUFF' '-D' 'UNITTESTS' '-D' 'REVISION=61d5fe3' '-MT' 'suricata.o' '-MD' '-MP' '-MF' '.deps/suricata.Tpo' '-c' '-o' 'suricata.o' 
as -arch x86_64 -force_cpusubtype_ALL -o suricata.o /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s 
/var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7791:no such instruction: `vcvtsi2ssq %rax, %xmm0,%xmm0' 
/var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7792:no such instruction: `vmovd %xmm0, %eax' 
/var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7799:no such instruction: `vcvtsi2ssq %rdx, %xmm0,%xmm0' 
/var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7800:no such instruction: `vaddss %xmm0, %xmm0,%xmm0' 
/var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7801:no such instruction: `vmovd %xmm0, %eax' 
/var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7804:no such instruction: `vmovd %eax, %xmm1' 
/var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7805:no such instruction: `vmovd %edx, %xmm2' 
/var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7806:no such instruction: `vdivss %xmm2, %xmm1,%xmm0' 
/var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7807:no such instruction: `vunpcklps %xmm0, %xmm0,%xmm0' 
/var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7808:no such instruction: `vcvtps2pd %xmm0, %xmm0' 
/var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7809:no such instruction: `vmovd %xmm0, %rax' 
/var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7819:no such instruction: `vmovd %rax, %xmm0' 
make: *** [suricata.o] Error 1 

यहाँ जब मैं जीसीसी-4.7 MacPorts (यह cctools उपयोग करता है) द्वारा स्थापित का उपयोग क्या होता है। मैंने यह देखने के लिए अनुकूलन बदलने की कोशिश की कि क्या इससे मदद मिलेगी।

xavierlange $> /opt/local/bin/gcc-mp-4.7 -DHAVE_CONFIG_H -I. -I.. -I../libhtp -I/usr/local/include -I/opt/local/include -g -O0 -Wextra -Wall -fno-strict-aliasing -fno-tree-pre -Wno-unused-parameter -std=gnu99 -DOS_DARWIN -march=native -DLIBPCAP_VERSION_MAJOR=1 -DHAVE_PCAP_SET_BUFF -DUNITTESTS -DREVISION="61d5fe3" -MT suricata.o -MD -MP -MF .deps/suricata.Tpo -S suricata.c -o suricata.s 
xavierlange $> /opt/local/bin/as suricata.s suricata.s:9811:no such instruction: `vcvtsi2ssq %rax, %xmm0,%xmm0' 
suricata.s:9812:no such instruction: `vmovd %xmm0, %eax' 
suricata.s:9819:no such instruction: `vcvtsi2ssq %rdx, %xmm0,%xmm0' 
suricata.s:9820:no such instruction: `vaddss %xmm0, %xmm0,%xmm0' 
suricata.s:9821:no such instruction: `vmovd %xmm0, %eax' 
suricata.s:9824:no such instruction: `vmovd %eax, %xmm1' 
suricata.s:9825:no such instruction: `vmovd %edx, %xmm2' 
suricata.s:9826:no such instruction: `vdivss %xmm2, %xmm1,%xmm0' 
suricata.s:9827:no such instruction: `vunpcklps %xmm0, %xmm0,%xmm0' 
suricata.s:9828:no such instruction: `vcvtps2pd %xmm0, %xmm0' 
suricata.s:9829:no such instruction: `vmovd %xmm0, %rax' 
suricata.s:9839:no such instruction: `vmovd %rax, %xmm0' 
+0

'-force_cpusubtype_ALL' विकल्प संदिग्ध प्रतीत होता है। यह उन निर्देशों को निर्दिष्ट करता है जो सभी x86-64 CPUs के लिए आम हैं। ये स्पष्ट रूप से एवीएक्स निर्देश हैं, जो सैंडी ब्रिज सीपीयू से पहले उपलब्ध नहीं हैं। –

+0

आकर्षक। प्रश्न में कंप्यूटर सैंडी ब्रिज के साथ 2011 मैकबुक प्रो है। http://en.wikipedia.org/wiki/Advanced_Vector_Extensions का कहना है कि जीसीसी 4.6 एवीएक्स का समर्थन करता है। यहां तक ​​कि जब मैं मैन्युअल रूप से करता हूं .s -> .o (कमांड पर कोई अतिरिक्त विकल्प नहीं) मुझे अभी भी त्रुटि मिलती है। – xrl

+1

जीएनयू असेंबलर बनाम मूल असेंबलर का उपयोग करते समय आप मुद्दों में भाग ले रहे हैं। [लिंक] (http://stackoverflow.com/questions/9840207/how-to-use-avx-pclmulqdq-on-mac-os-x-lion) –

उत्तर

13

संक्षिप्त समाधान '-march = native' विकल्प को हटाया जाएगा (कम से कम यह मेरे लिए काम करता है)।

+3

डिफ़ॉल्ट एसएसई 2 पर वापस आने के बजाय, यदि आप प्रदर्शन की परवाह करते हैं, तो आप एवीएक्स के निकट निर्देश सेट को ऑप्टिमाइज़ेशन सक्षम करने के साथ बेहतर हैं जो एसएसई 4.2 होगा। इसलिए मैं '-march = native' को '-msse4.2' के साथ बदल दूंगा। – pszilard

+4

यहां तक ​​कि बेहतर: '-march = native-mno-avx'। या @capisce द्वारा जवाब देखें। – Chris

+0

@khkarens आपकी शक्तिशाली मदद के लिए बहुत बहुत धन्यवाद। आप सभी के लायक हैं। आपने मुझे खोज का बहुत समय बचाया। चीयर्स। ab –

4

ऐसा लगता है कि as का एक संस्करण है कि AVX एक्सटेंशन के बारे में पता नहीं है चला रहे हैं कि। आपको या तो एक नया gas बनाने की आवश्यकता है या इकट्ठा करने के लिए clang का उपयोग करें।

+0

यह काम नहीं करता है। मैंने मैकपोर्ट से जीसीसी स्थापित किया और मैन्युअल रूप से .c -> .s और .s -> .o से जाने का प्रयास किया। मैंने परिणामों के साथ प्रश्न अद्यतन किया है। – xrl

+0

शायद मैं संकलक में AVX निर्देशों को दबा सकता हूं? – xrl

23

कंपाइलर झंडे में -Wa,-q जोड़ना मेरे लिए इस समस्या को ठीक करता है। के रूप में के लिए आदमी पृष्ठों से:

-q

     Use the clang(1) integrated assembler instead of the GNU based system assembler.

-Wa हिस्सा कोडांतरक के लिए संकलक ड्राइवर से यह गुजरता है, बहुत पसंद -Wl लिंकर को तर्क से गुजरता है।

+0

जब शामिल हो (उदा। "-आई/ऑप्ट/स्थानीय/शामिल /") मुझे प्रकार की चेतावनियां मिलती हैं "क्लैंग: चेतावनी: तर्क संकलन के दौरान अप्रयुक्त: '-आई/ऑप्ट/स्थानीय/शामिल /'"। किसी और को एक ही समस्या का सामना करना पड़ रहा है? मैं _really_ किसी भी चेतावनी के बिना निर्माण करने में सक्षम होने की तरह। –

+1

मैंने कोशिश की और "clang: त्रुटि: असमर्थित तर्क '-q' विकल्प 'Wa' ' – Jeff

+1

शायद यह थोड़ा देर हो चुकी है, लेकिन शायद इसका मतलब है कि आप क्लैंग का उपयोग कर रहे हैं, जो ओएस एक्स पर जीसीसी के लिए अलियाड है – MrCodeBlok