2017-03-13 8 views
5

크리스탈 작업에서 바인딩이 어떻게되는지 알아 내려고합니다. 처음에는 크리스탈에 간단한 hello world c 함수를 어떻게 포함 시킬지 궁금합니다. 기본 사항부터 시작하는 것이 좋습니다. 여기에 내가 포함시키고 자하는 기능이 있습니다 :Crystal C 바인딩, 간단한 hello world 예제.

#include <stdio.h> 

void hello(const char * name){ 
    printf("Hello %s!\n", name); 
} 
+2

장기적으로는 동적으로 링크 된 라이브러리 (예 : 'libawesome.so' (C 측에서부터 복잡합니다) 그리고 일반적인 예제처럼 사용할 수 있습니다 :'@ [Link ("awesome")]'. –

+0

@OlehPrypin 의견을 주셔서 감사합니다. 나는 실제로 그것을 조사하고있었습니다. 매우 감사. – Jake

+0

@ 제이크 나는 최근에 당신이 이것을 성취 할 수있는 방법을 보여주는 작은 데모를 만들었습니다 : https://github.com/ethagnawl/crystal-c-interop-demo 잘하면 그것은 유익한 일입니다! – pdoherty926

답변

7

그게 나에게도 잘 이해하고 있습니다. 먼저 C 파일을 객체로 컴파일해야합니다. gcc에서 gcc -c hello.c -o hello.o을 실행합니다.

다음 크리스탈 파일에서 C 개체에 연결해야합니다. 여기 예가 있습니다 :

#hello.cr 
@[Link(ldflags: "#{__DIR__}/hello.o")] 

lib Say 
    fun hello(name : LibC::Char*) : Void 
end 

Say.hello("your name") 

이제 Crystal 응용 프로그램을 컴파일하기 만하면 작동합니다. crystal build hello.cr

+1

** 감사합니다 ** @isaacsloan, 이것은 많은 도움이됩니다. 내 미래 프로젝트 중 일부에 이것을 구현하게되어 기쁩니다. – Jake