2009-08-22 4 views
9

이것에 대해 많은 문서를 찾을 수 없습니다. 보석이 설치 될 때 C 확장이 컴파일되도록 보석을 어떻게 포장합니까? 특히 Ruby Gem에서 Ruby C 확장을 마무리하려면 어떻게합니까?

나는이 작업을 수행 할 수 :

리눅스와에서라도에
  • 나는 단순히 미리 컴파일 된 .so를 설치하고자하는 보석의 C 확장 Windows에서

  • 를 설치 컴파일 싶습니다

여기에 대한 도움, 특정 예제 소스에 매우 유용 할 것이다 :

답변

14

Luis Lavena은이 목적으로 만 rake-compiler을 생성했습니다.

  • Project Page
  • GitHub project, 당신이 C의 확장이 필요하다는 것을 확신? C 확장에 관한 한 가지 점은 모든 Ruby 구현에는 자체 C 확장 API (XRuby, JRuby, Ruby.NET, IronRuby, HotRuby, MagLev, Red Sun과 같은 C 기반 확장 API가 없습니다)가 있습니다. C 확장자가 하나의 구현에서만 작동 함을 의미합니다. 그리고 MRI 만이만이 Ruby 1.8과 YARV 을 구현하기 때문에만이 Ruby 1.9를 구현하고 있으며 현재 1.8과 1.9 사이의 전환 단계에 있으며, 많은 사람들이 적어도 두 가지 구현을 사용하게 될 가능성이 있습니다. (저는 개인적으로 5 : MRI, YARV, JRuby, IronRuby, Rubinius를 사용합니다.)

    아마도 Ruby-FFI을 사용하는 것이 더 나을 것입니다. Ruby-FFI는 루비 용 FFI (Foreign Function Interface)입니다 (duh). Ruby 구현에서 이식 가능한 방식으로 순수 루비에서 C 라이브러리에 바인딩하고 매핑 할 수 있습니다. FFI API는 Rubinius에 대한 기본 확장 API로 Evan Phoenix에 의해 처음 개발되었으며 JRuby에 대해 Charles Oliver Nutter (및 Wayne Meissner으로 구현 됨)으로 채택되었습니다. Wayne 또한 MRI와 YARV에 대한 C 확장을 포함하는 Ruby-FFI gem을 작성했습니다. Laurent SansonettiMacRuby, Marc-André Cournoyertinyrbsupports FFI (다시 쓰여진 사람은 Wayne Meissner)이고 MagLev 개발자도 Ruby-FFI를 구현했습니다. 즉, C 확장자가 아닌 FFI로 라이브러리를 작동시킬 수 있다면, 자동으로 6 개의 Ruby 구현을 지원할 것입니다.

    FFI 확장과 반대되는 C 확장을 사용하는 유일한 이유는 실제로 일 경우이 특정 구현 동작을 원할 경우입니다. 이것의 한 예가 ParseTree 젬으로 MRI의 장내 깊숙이 침투하여 파스 트리의 메모리 내 표현을 추출합니다.

    마지막으로 Nice-FFI 프로젝트를 John Croisant으로 살펴보면 Ruby-FFI을 더 멋지게 만드는 것을 목표로합니다.

  • +0

    와우, 멋지 네요! 감사합니다 :) – horseyguy

    +0

    당신을 환영합니다! 그런데 총 에고가있었습니다. 저는 Windows에서 Ruby를 사용하기 때문에 더 많은 확장 프로그램 작성자가 레이크 컴파일러를 사용하면 더 많은 확장 프로그램이 Windows 용으로 게시됩니다! (하지만 내 편집을 참조하십시오.) –

    +0

    이 답변은 '09에서 온 것 같아서 일부 답변은 업데이트해야합니다. – Tilo

    0

    나는 내 자신의 참조만을 위해 유지하는 github repo를 가지고 있으며 이러한 것들이 나를 도왔다.

    Ruby_C_extensions

    이미 당신의 연구에 기록 된 보석의 좋은 예를 찾을 가서 그들을 복제하고 시스템에이를 구축 할 수 있는지 확인하기 위해 GitHub의에 주위를 둘러하는 데 도움이 될 수 있습니다. 그들은 함께 모이면 제대로 지어야합니다.

    사용중인 플랫폼에 빌드 도구가 필요합니다. 여기 내가 방금 본 비디오가 리눅스에 필요한 것을 알려줍니다.

    Python Programming Environment Setup

    지금 나는 파이썬을 말한다, 그가 어떻게 빌드 도구 패키지를 설치하는 방법을 보여 않는다는 것을 알고있다.

    저는 Windows 용 DevKit을 사용하며 제게 적합합니다. 무엇보다도 도구 설치가 가장 중요합니다.

    또한 rake-compiler와 hoe를 사용하여 폴더 구조를 설정했습니다. 그래서 우리는 갈퀴와 괭이를 얻어서 약간의 원예를 기울여야 만하는 것처럼 보입니다. :-D

    관련 문제