2017-03-13 18 views
5

Próbuję dowiedzieć się, jak c powiązania w pracy kryształu. Na początek zastanawiam się, w jaki sposób dodać do kryształu prostą funkcję hello world c. Zawsze dobrze zacząć od podstaw, prawda? Oto funkcja, którą chciałbym dołączyć:Wiązanie Crystal C, prosty przykład Witaj świecie.

#include <stdio.h> 

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

W dłuższej perspektywie można wdrożyć dynamicznie połączoną bibliotekę, np. 'libawesome.so' (co jest skomplikowane od strony C), a następnie możesz go użyć jak zwykłych przykładów:' @ [Link ("awesome")] '. –

+0

@OlehPrypin Dzięki za komentowanie. Właśnie się nad tym zastanawiałem. Bardzo doceniane. – Jake

+0

@Jake Ostatnio stworzyłem małe demo, które pokazuje, jak możesz to zrobić: https://github.com/ethagnawl/crystal-c-interop-demo Mam nadzieję, że to pouczające! – pdoherty926

Odpowiedz

7

To też trochę mnie rozgryzło. Najpierw musisz skompilować swój plik C do obiektu. W gcc można uruchomić gcc -c hello.c -o hello.o.

Następnie w pliku krystalicznym należy połączyć z obiektem C. Oto przykład:

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

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

Say.hello("your name") 

Teraz wystarczy po prostu skompilować aplikację kryształową, która zadziała. crystal build hello.cr

+1

** Dzięki ** @isaacsloan, to bardzo pomaga. Jestem podekscytowany wprowadzeniem tego do niektórych moich przyszłych projektów. – Jake

Powiązane problemy