0

カスタム C ライブラリを使用する基本的な Cython プログラムを実行するために sage を使用しようとしています。

hello.h、hello.c、cpy.spyx の 3 つのファイルがあります。

こんにちは。

#include <stdio.h>  
void chello();

こんにちはC:

#include "hello.h"  
void chello() {  
  printf("Hello world\n");  
}

cpy.spyx:

#cinclude /home/sage/sage  
cdef extern from "/home/sage/sage/hello.h":  
  void chello()  
def pyhello():  
  chello()

コマンド (のみ) を使用して、これを sage で実行しようとしています:
load "cpy.spyx"

次のエラーが表示されます:
Import Error /home/sage/sage//temp/... : undefined symbol: chello これは Cython での最初の試みなので、コードに愚かな間違いがある可能性があります。別の理論として、.h ファイルが上記の一時ディレクトリにコピーされていないというものがあります。

ありがとう

4

1 に答える 1

1

最後にここで解決策を見つけました:http: //trac.sagemath.org/sage_trac/ticket/1994

明らかに他の方法で文書化されていないディレクティブがいくつかあります。

上記と同じ.cおよび.hファイルを使用して、次の.spyxファイルを使用しました。

#clang c  
#cfile hello.c  
#cinclude /home/sage/sage  
cdef extern from "/home/sage/sage/hello.h":  
  void chello()  
def pyhello():
  chello()

リンクと上記のコードの違いに注意してください。#の後にスペースを含めず、cinclude行のパスを引用符で囲みませんでした。これは、Sageを使用したCythonのHelloWorldプログラムの良い例です。

3つのファイル(.c、.h、および.spyx)すべてを/ home / sage/sageディレクトリに配置しました。それから私はセージを走らせてプログラムを始めました

load cpy.spyx

他のステップはありません。

于 2011-06-16T17:59:05.733 に答える