4

私は Python/C API の研究を始めており、いくつかの関数をテストする最初のコードを作成しています。これを書きます:

ファイル: test.c

#include "Python.h"

int main() {
    PyObject* none = Py_BuildValue("");
}

私はコマンドでコンパイルします:

gcc -I/usr/include/python2.7 test.c

「Py_BuildValue」への未定義の参照というエラーが発生しました

私が実行した後:

gcc -I/usr/include/python2.7 --shared -fPIC hashmem.c

これはエラーなしでコンパイルされますが、コンパイルされたファイルを実行すると、

Segmentation fault (core dumped)

gcc パラメータを設定するにはどうすればよいですか?

ubuntu 12.04、python 2.7.3、gcc 4.6.3 を使用し、python-dev をインストールしました。

ありがとう。

4

1 に答える 1

2

コメントで@Pabloは解決策を提供しました

gcc -I/usr/include/python2.7 test.c -lpython2.7

Pythonライブラリを「-l」パラメータにリンクするのを忘れました。

-llibrary-llibraryリンク時にlibraryという名前のライブラリを検索します。(ライブラリを個別の引数として使用する2番目の選択肢は、POSIXのみを対象としているため、お勧めしません。)コマンドのどこでこのオプションを記述するかによって違いが生じます。リンカは、指定された順序でライブラリとオブジェクトファイルを検索して処理します。したがって、foo.o -lz bar.o' searches libraryファイルfoo.oの後、bar.oの前のz'。bar.oがz', those functions may not be loaded.The linker searches a standard list of directories for the library, which is actually a file named liblibrary.a. The linker then uses this file as if it had been specified precisely by name.The directories searched include several standard system directories plus any that you specify with -L.Normally the files found this way are library files—archive files whose members are object files. The linker handles an archive file by scanning through it for members which define symbols that have so far been referenced but not defined. But if the file that is found is an ordinary object file, it is linked in the usual fashion. The only difference between using an -l option and specifying a file name is that - l surrounds library withlib'および`.a'の関数を参照し、いくつかのディレクトリを検索する場合。 

パラメータ記述ソース

于 2012-10-18T15:43:07.847 に答える