2014-01-17 3 views
2

커스텀 vapi 파일을 만들고 싶습니다만, 저는 기본적인 것들을 가지고 있습니다. 그러나 나는 분명히 뭔가를 놓쳤습니다. 내 주요 목표는 libtorrent을 사용하여 torent 앱을 만들고 vala 및 gtk로 GUI (프론트 엔드?)를 만드는 것입니다.vapi 파일을 만들고 사용하는 방법은 무엇입니까?

#ifndef WHATEVER_H_INCLUDED 
#define WHATEVER_H_INCLUDED 
int add(int a, int b); 
#endif 

c_functions.c :

#include <stdio.h> 
#include <stdlib.h> 
#include "c_func_head.h" 

int add(int a, int b){ 
    printf("Adding numbers in c...\n"); 
    return a+b; 
} 

vala_p.vapi :

[CCode (cheader_filename = "c_func_head.h")] 
namespace MyFunc { 
    [CCode (cname = "add")] 
    public int add (int a, int b); 
} 

마지막 vala_program.vala :

//extern int add(int a, int b); 
using MyFunc; 

void main(){ 
    stdout.printf("Calling a c function...\n"); 
    //stdout.printf("The sum is: %d\n", add2number(2, 2)); 
    int sum = add(2, 2); 
    stdout.printf("The sum is: %d\n", sum); 
} 

나는 c_func_head.h이

extern을 사용해도 알 수 있듯이, extern을 사용했지만 vapi 파일을 사용하고 싶습니다.

valac vala_program.vala --vapidir = vala_p.vapi -o mustrun

과 오류는 다음과 같습니다 : 컴파일

I (다 같은 폴더에)

MyFunc를 사용하여 네임 스페이스 이름 'MyFunc'을 (를) 찾을 수 없습니다.

한 가지 더. libtorrent에 대한 바인딩을 만들 수 있습니까? 그것은 C + +를 사용하고 나는 C++도 사용해야한다고 생각합니다.

답변

2

C++ 코드의 Vala 바인딩을 만들 수 없습니다. 오직 C. 거기에 a guide to writing legacy bindingsa binding for Transmission, 이것은 C 기반입니다.

특정 오류에 대해서는 라이브러리 (즉, 헤더 파일)가 valac vala_program.vala --pkg vala_p --vapidir=/path/to/directory/containing/vapi 인 경우 valac vala_program.vala vala_p.vapi을 호출하려고합니다.

+0

처음 컴파일 할 때 '추가'기능에 대한 정의되지 않은 참조가 있습니다. 두 번째 방법은 "c_func_head.h"파일을 찾을 수 없다는 의미입니다. (나는 .o 파일을 만들었지 만 행운은 없다.) – Levi

+0

처음에는 여전히 C 코드를 제공해야한다. 포함될 원시 소스라면'valac vala_program.vala vala_p.vapi c_functions.c'을 할 수 있습니다. 그렇지 않다면'-X'를 사용하여 C 컴파일러에 올바른 인자를 부여하여 코드와 링크하십시오. 두 번째로, C 컴파일러는 헤더를 검색 할 위치를 모른다. '-X -I.'를 사용하여 현재 디렉토리를 포함 시키십시오. – apmasell

+0

감사합니다. – Levi

관련 문제