Không thể xây dựng tiện ích mở rộng gốc đá quý (cài đặt La bàn)


274

Khi tôi cố gắng cài đặt phiên bản la bàn mới nhất ( https://rubygems.org/gems/compass/versions/1.0.0.alpha.17 ), tôi gặp lỗi sau.

ERROR:  Error installing compass:
ERROR: Failed to build gem native extension.

 ERROR:  Error installing compass:
  ERROR: Failed to build gem native extension.

    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb
checking for ffi.h... no
checking for ffi.h in /usr/local/include,/usr/include/ffi... yes
checking for ffi_call() in -lffi... yes
checking for ffi_prep_closure()... yes
checking for ffi_raw_call()... no
checking for rb_thread_blocking_region()... yes
checking for rb_thread_call_with_gvl()... yes
checking for rb_thread_call_without_gvl()... yes
checking for ffi_prep_cif_var()... no
creating extconf.h
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling AbstractMemory.c
compiling ArrayType.c
compiling Buffer.c
compiling Call.c
Call.c:303:5: warning: implicit declaration of function 'rb_thread_call_without_gvl' is invalid in C99 [-Wimplicit-function-declaration]
    rbffi_thread_blocking_region(call_blocking_function, data, (void *) -1, NULL);
    ^
./Thread.h:78:39: note: expanded from macro 'rbffi_thread_blocking_region'
# define rbffi_thread_blocking_region rb_thread_call_without_gvl
                                      ^
1 warning generated.
compiling ClosurePool.c
compiling DataConverter.c
DataConverter.c:43:1: warning: control may reach end of non-void function [-Wreturn-type]
}
^
1 warning generated.
compiling DynamicLibrary.c
compiling ffi.c
compiling Function.c
Function.c:479:33: warning: incompatible pointer types passing 'VALUE (void *)' to parameter of type 'void *(*)(void *)' [-Wincompatible-pointer-types]
        rb_thread_call_with_gvl(callback_with_gvl, &cb);
                                ^~~~~~~~~~~~~~~~~
Function.c:102:46: note: passing argument to parameter 'func' here
extern void *rb_thread_call_with_gvl(void *(*func)(void *), void *data1);
                                             ^
Function.c:563:9: warning: implicit declaration of function 'rb_thread_call_without_gvl' is invalid in C99 [-Wimplicit-function-declaration]
        rb_thread_call_without_gvl(async_cb_wait, &w, async_cb_stop, &w);
        ^
Function.c:738:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
3 warnings generated.
compiling FunctionInfo.c
compiling LastError.c
compiling LongDouble.c
compiling MappedType.c
compiling MemoryPointer.c
compiling MethodHandle.c
compiling Platform.c
compiling Pointer.c
compiling Struct.c
compiling StructByReference.c
compiling StructByValue.c
compiling StructLayout.c
compiling Thread.c
compiling Type.c
compiling Types.c
compiling Variadic.c
linking shared-object ffi_c.bundle
clang: error: unknown argument: '-multiply_definedsuppress' [-Wunused-command-line-argument-hard-error-in-future]
clang: note: this will be a hard error (cannot be downgraded to a warning) in the future
make: *** [ffi_c.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Library/Ruby/Gems/2.0.0/gems/ffi-1.9.3 for inspection.
Results logged to /Library/Ruby/Gems/2.0.0/extensions/universal-darwin-13/2.0.0/ffi-1.9.3/gem_make.out

Những gì đang xảy ra ở đây? Làm cách nào để cài đặt la bàn mới nhất mà không gặp lỗi?



hãy chắc chắn rằng bạn đã thực hiện trên hệ thống của bạn.
Sorter

Câu trả lời:


577

Hãy thử điều này, sau đó thử cài đặt lại la bàn

apt-get install ruby-dev

33
Điều này sửa lỗi trên Ubuntu, nhưng có vẻ như OP đang sử dụng OSX.
mhnagaoka

1
Đã sửa lỗi cho tôi trên Ubuntu 14.04 LTS
thomh

30
Hoạt động trên CentOS với "yum install ruby-devel" tương đương. Cảm ơn !
B2F

6
Thật buồn cười khi tìm một giải pháp cho vấn đề Ubuntu của tôi trong câu trả lời cho câu hỏi OSx. Tuy nhiên, bạn đã nhận được upvote của tôi khi câu trả lời của bạn chỉ giải quyết vấn đề của tôi. Tnx!
e-sushi

3
Bất kỳ ý tưởng làm thế nào để làm điều này để làm việc trên Windows? Tôi đã cài đặt các công cụ phát triển Ruby bằng cách sử dụng choco install ruby2.devkitnhưng nó vẫn không hoạt động
jtate

123

Để cài đặt la bàn Trên Mac OS X 10.10 (Yosemite) phải thực hiện như sau:

1. Thiết lập môi trường Ruby

  • Đảm bảo ruby ​​được cài đặt và cập nhật: ruby -v
  • Cập nhật đá quý sudo gem update --system

2. Thiết lập môi trường MAC

Cài đặt Công cụ dòng lệnh Xcode đây là chìa khóa để cài đặt La bàn.

xcode-select --install

Cài đặt Công cụ dòng lệnh Xcode là chìa khóa để La bàn hoạt động trên OS X

3. Cài đặt La bàn

sudo gem install compass

3
Đối với tôi đây là câu trả lời chính xác, nó cần các công cụ dòng lệnh Xcode
svnm 18/12/14

2
Cảm ơn, đã làm việc cho tôi, bạn đã đúng, Công cụ dòng lệnh Xcode là chìa khóa.
sarcom

5
Điều này làm việc với tôi với một bổ sung - bạn phải thực sự bắt đầu XCODE để bạn có thể chấp nhận thỏa thuận cấp phép và để cho nó hoàn tất thiết lập. Có thể có giá trị gắn thẻ vào câu trả lời của bạn.
Bruford

Việc chấp nhận cập nhật (điều khoản thỏa thuận) thông qua GUI cũng hoạt động.
cassioscabral

Trên MacBook Pro được cập nhật gần đây lên Sierra 10.12.6, tôi cũng đã phải chạy "sudo xcodebuild -license" để chấp nhận các điều khoản và điều kiện, trước khi chạy la bàn cài đặt sudo gem ....
jocherra

46

Cách tốt nhất là sudo apt-get install ruby-compasscài đặt la bàn.


1
Wow, đôi khi thật dễ dàng ^^ đã cố gắng cài đặt la bàn bằng đá quý, nhưng có một số phụ thuộc không được giải quyết bằng đá quý. Với apt-get nó hoạt động tốt! Cảm ơn
naitsirch


30

Tôi vật lộn với bạn cùng một vấn đề trong khoảng 3 giờ. Kể từ đó Compass 1.0.alpha19, yêu cầu dành cho phiên bản rvm 1.9.3.

Có một số bài viết không bị kiểm soát, tuy nhiên những gì làm việc cho tôi là như sau:

  1. sudo gem uninstall sass
  2. sudo gem uninstall compass
  3. rvm install ruby-1.9.3-p448
  4. sudo gem install sass --pre
  5. sudo gem install compass --pre

và điều đó đã làm nó. Hy vọng nó cũng làm việc cho bạn!


Gần đây tôi có vấn đề tương tự nhưng với một phiên bản mới hơn. Những gì tôi đã làm là gỡ cài đặt phiên bản ruby ​​mà tôi đã cài đặt trước đó với aptitude và sau đó tôi cài đặt lại nó theo hướng dẫn tại: rvm.io/rvm/install . Với la bàn phiên bản ruby ​​/ rvm mới được chế tạo đúng cách.
adosaiguas

2
Cảm ơn vì điều này, rất hữu ích. Tôi đã thay đổi bước 3 thành rvm install ruby-2.1.21.9.3 không còn được cập nhật
timelf123

24

Để tôi giải quyết vấn đề này, tôi phải đảm bảo rằng tôi có phiên bản mới nhất của Ruby và đá quý gem update --system; sau đó, tôi phải đảm bảo rằng Xcode & Công cụ dòng lệnh đã được cài đặt : xcode-select --install.


xcode-select --installđã được thực hiện nhưng điều này không giải quyết được cho tôi
Ade


10

Xin chào, đó là một thách thức để làm cho nó hoạt động trên Mac vì vậy dù sao đây là một giải pháp

  1. Cài đặt macports
  2. Cài đặt rvm
  3. Khởi động lại ga
  4. Chạy rvm requirementsrồi chạyrvm install 2.1
  5. Và bước cuối cùng để chạy gem install compass --pre

Tôi không chắc nhưng phiên bản ruby ​​trên Mavericks không hỗ trợ các tiện ích mở rộng gốc, v.v ... vì vậy nếu bạn trỏ đến phiên bản ruby ​​khác như tôi đã làm "2.1" thì nó hoạt động tốt.


Tôi khuyên bạn không nên sử dụng macports.
nomis

6

Không chắc chắn tại sao không ai trong số này được đánh dấu là câu trả lời đúng, nhưng tôi đã đến đây thông qua một tìm kiếm google, vì vậy tôi sẽ chuyển qua những gì tôi biết ...

Phương pháp của @ paul_g khá gần gũi với tôi, các bước của tôi trên Mac osx10.9 Retina:

  • Cài đặt macports
  • Cài đặt rvm (ổn định với --insecurecờ thêm ruby cho các vấn đề liên quan đến SSL) $\curl -sSL --insecure https://get.rvm.io | bash -s stable --ruby
  • Khởi động lại Terminal / Tài nguyên hồ sơ của bạn
  • Chạy rvm requirements --with-gcc=clangBạn sẽ không phải cập nhật Ruby vì bạn đã tải xuống phiên bản ổn định cuối cùng
  • Và bước cuối cùng để chạy gem install compass --pre

4

Bạn có thể cần phải cài đặt Công cụ dòng lệnh của Apple, có thể không được cài đặt trên hệ thống của bạn theo mặc định. Tôi đã nhận được cùng một lỗi, nhưng trước khi làm theo bất kỳ hướng dẫn nào ở đây, tôi đã cài đặt Công cụ dòng lệnh (do vấn đề không liên quan) và lo và cài đặt la bàn mà không gặp sự cố khi tôi thử lại. YMMV.


Điều này đã giải quyết vấn đề trên cho tôi, vì vậy tôi sẽ nói đây là một câu trả lời chấp nhận được cho câu hỏi trên.
Peter J Harrison

4

Để cài đặt La bàn trên Yosemite, bạn cần thiết lập môi trường Ruby và cài đặt Công cụ dòng lệnh Xcode. Nhưng, điều quan trọng nhất, sau khi cập nhật Xcode, hãy chắc chắn khởi chạy ứng dụng Xcode và chấp nhận các điều khoản cấp phép của Apple . Nó sẽ hoàn thành việc cài đặt các thành phần. Sau đó, bạn có thể cài đặt La bàn: sudo gem cài đặt la bàn


4

Nếu bạn đang sử dụng Ubuntu, bạn nên thử cài đặt bản dựng

apt install build-essential

Tôi gặp rắc rối với việc cài đặt đá quý khi cài đặt Ubuntu mới và giải pháp này hiệu quả với tôi.


Tôi đã từng gặp vấn đề tương tự. Một số người nên nâng cao điều này.
Sorter

3

Đối với Mojave macOS 10.14, hãy đảm bảo bạn đã cài đặt các công cụ dòng lệnh thông qua xcode-select --installvà chạy lệnh sau để cài đặt các tiêu đề std.

sudo open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Bây giờ hãy thử lại lệnh của bạn.


3

bạn phải có gcc, json_pure

tôi thu thập một số thông tin từ một số bài

sudo gem uninstall sass
sudo gem uninstall compass
sudo gem update --system
gem install json_pure   (if you have already have continued to next step)
sudo yum install gcc gcc-c++   (if you have already have continued to next step)
sudo gem install sass

sudo gem install compass

Xin chào nếu ** sudo gem update --system ** không hoạt động bạn gặp lỗi trong bản cập nhật thì hãy sử dụng

cập nhật đá quý sudo - hệ thống 2.7.8


Tôi cũng đã phải chạy sudo yum install -y redhat-rpm-configcho Fedora 24 trước khi cài đặt la bàn vì lỗi này:gcc: error: /usr/lib/rpm/redhat/redhat-hardened-cc1: No such file or directory
Bryce Guinta

sudo gem update --systemđã cho tôi lỗi: ERROR: While executing gem ... (Errno::EPERM) Operation not permitted @ rb_sysopen - System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/gem:(
Ade

2

Trên yosemite, tất cả những gì bạn phải làm là cài đặt các công cụ dòng lệnh. sau đó nó hoạt động.

Ngay cả khi đá quý khác cài đặt tốt. Bạn phải chạy xcode-select --install để gem install la bàn hoạt động.

Chúc may mắn.


2

Trên Mac OS X 10.9, nếu bạn dùng thử xcode-select --install, bạn sẽ gặp lỗi sau:

Không thể cài đặt phần mềm vì hiện tại nó không có sẵn từ máy chủ Cập nhật phần mềm.

Giải pháp là tải xuống Công cụ dòng lệnh (OS X 10.9) trực tiếp từ trang web của Apple: https://developer.apple.com/doads/index.action?name=for%20Xcode%20-

Sau đó, bạn sẽ có thể cài đặt phiên bản cuối cùng của Công cụ dòng lệnh.


2

Trong Ubuntu 14.04, trong khi thực thi rubygems cài đặt apt-get , đã xảy ra lỗi

E: Gói 'rubygems' không có ứng cử viên cài đặt

theo lệnh giải quyết các vấn đề.

sudo apt-get cài đặt gcc ruby-devel rubygems-integration ruby-la bàn


2

Hãy thử brew install coreutils.

Tôi đã gặp phải vấn đề này trong khi xây dựng lại một dự án sass / la bàn cũ đã được một đồng nghiệp cập nhật lên ruby ​​2.2.5. Dự án sử dụng rvm và bundler. Đây là những mệnh lệnh của tôi

$ rvm install ruby-2.2.5
$ rvm use ruby-2.2.5
$ gem install bundler
$ bundle install

Điều này khiến tôi gặp phải các ffilỗi cài đặt nổi tiếng , được báo cáo xung quanh môi trường StackOverflow:

An error occurred while installing ffi (1.9.14), and Bundler cannot continue.

Hầu hết các đề xuất để giải quyết vấn đề này là cài đặt các công cụ dòng lệnh Xcode. Tuy nhiên, điều này đã được cài đặt trong môi trường của tôi:

$ xcode-select -p
/Library/Developer/CommandLineTools

Các đề xuất khác nói để cài đặt gcc ... vì vậy tôi đã thử:

$ brew install gcc46

Nhưng điều này cũng thất bại do lỗi phân khúc ... ¯\_(ツ)_/¯ .

Vì vậy, sau đó tôi đã thử cài đặt la bàn bằng tay, chỉ để xem liệu nó có đưa ra cùng một ffilỗi không:

$ gem install compass

Nhưng thật ngạc nhiên, tôi đã nhận được một lỗi hoàn toàn khác:

make: /usr/local/bin/gmkdir: No such file or directory

Vì vậy, tôi đã tìm kiếm vấn đề đó và tìm thấy bài đăng trên blog cổ này có nội dung cài đặt coreutils:

$ brew install coreutils

Sau khi cài đặt coreutilsvới Homebrew, bundler đã có thể hoàn thành và cài đặt thành công la bàn và phụ thuộc.

Kết thúc.



2

khi nào

cài đặt đá quý overcommit

cũng chạy lỗi này đã được đặt trong thiết bị đầu cuối.

Failed to build gem native extension

xin hãy làm như vậy

xcode-select --install

và nó cũng sẽ khắc phục vấn đề đó


Tôi nhận được xcode-select: error: command line tools are already installed, use "Software Update" to install updates. Điều này không sửa chữa nó.
Ade

2

Đối với hệ điều hành Mac:

Lỗi của tôi là tôi đã quên chọn tùy chọn trong XCode - Tùy chọn - Vị trí - Công cụ dòng lệnh sau khi cài đặt XCode mới (Tôi có 2 phiên bản và sau đó tôi đã xóa một phiên bản). Có lẽ nó sẽ giúp được ai đó.

nhập mô tả hình ảnh ở đây


1

Hãy thử điều này, sau đó thử cài đặt lại la bàn

sudo apt install ruby-full

0

Tôi gặp vấn đề tương tự trên Linux Mint nhưng tôi đã có thể khắc phục bằng cách gỡ cài đặt ruby ​​và cài đặt lại.

Gỡ cài đặt ruby:

sudo apt-get remove ruby

Nó báo cáo một số gói ruby ​​như:

Package 'ruby' is not installed, so not removed
The following packages were automatically installed and are no longer required:
libruby2.2 ruby-chunky-png ruby-sass rubygems-integration
Use 'apt-get autoremove' to remove them.

Gỡ cài đặt các gói còn lại *

apt-get autoremove

Cài đặt lại ruby

sudo apt-get install ruby2.2

Cài đặt la bàn

sudo gem install compass

Lệnh cuối cùng được thực hiện với thành công.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.