質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

8323閲覧

cでpythonを呼び出し

uriuri

総合スコア47

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/09/13 05:10

編集2018/09/13 08:00

おおもとのプログラムはcを用いています
それにpythonのプログラムを用いて動かしたいと思っています

参考サイト
https://blanktar.jp/blog/2013/05/use-python-by-c-lang.html

サイトの通りにmain.cをコンパイルしようとした時にpython.hがないというエラーがでました

パッケージもインストール済みでpython.hはありました
/usr/include/python2.7/Python.h
/usr/include/python3.5m/Python.h

参考サイト
https://qiita.com/YanaErry/items/b03a88605ae0ea40da55

vi ~/.bashrc
で中身に
CPATH=:/usr/include/python3.5m/
を追記したのですが解決されませんでした
エラー内容は
fatal error: Python.h: そのようなファイルやディレクトリはありません
compilation terminated.

アドバイスいただけると幸いです

python.c

c

1#include <stdio.h> 2#include <Python.h> 3 4int main() 5{ 6 PyObject *pModule, *pTmp; 7 char *sTmp; 8 9 Py_Initialize(); 10 11 /* モジュールをimport */ 12 pModule = PyImport_ImportModule("○○.py"); 13 14 /* pythonで言う pTmp = getattr(pModule, 'func')() みたいな。 */ 15 pTmp = PyObject_CallMethod(pModule, "func", NULL); 16 17 /* PyObjectをC言語の型に変換 */ 18 PyArg_Parse(pTmp, "s", &sTmp) 19 20 printf("%s\n", sTmp); 21 22 Py_Finalize(); 23 return 0; 24}
/usr/lib/python2.7/dist-packages/vtk/libvtkRenderingPythonTkWidgets.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkChartsCorePython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkCommonColorPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkCommonComputationalGeometryPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkCommonCorePython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkCommonDataModelPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkCommonExecutionModelPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkCommonMathPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkCommonMiscPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkCommonSystemPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkCommonTransformsPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkDomainsChemistryPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersAMRPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersCorePython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersExtractionPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersFlowPathsPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersGeneralPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersGenericPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersGeometryPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersHybridPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersHyperTreePython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersImagingPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersModelingPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersParallelFlowPathsPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersParallelGeometryPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersParallelImagingPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersParallelMPIPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersParallelPython.x86_64-linux-gnu.so /usr/lib/python2.7/dist-packages/vtk/vtkFiltersParallelStatisticsPython.x86_64-linux-gnu.so . .

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2018/09/13 05:39

「サイトの通りにmain.cをコンパイルしようとした時に」→具体的なコマンドは?
uriuri

2018/09/13 05:57

gcc python.cでコンパイルを行いました
otn

2018/09/13 06:24 編集

それだと全然サイトの通りじゃない。-Iインクルードパス とライブラリの指定が要りますね。
uriuri

2018/09/13 07:55

cについてはまだ知識が浅くて申し訳ありません。 -I/usr/include/python2.7/でインクルードパスの追加、ライブラリパスについてなのですがlibの中にpython27.libというものが見当たりませんでした
uriuri

2018/09/13 07:55

質問のところに検索結果を載せます
guest

回答1

0

ベストアンサー

質問される場合には、環境(使用しているOSなど)をできるだけ細かく書く事をおすすめします。

何となくlinuxっぽいので、そのつもりで回答します。
Pythonの開発環境が入っていれば、「python-config」(python3であれば、「python3-config」)というコマンドもインストールされているはずです。
これを使うと、その環境に合わせたコンパイル・リンクオプションが表示されます。
(例えば、以下はubuntu18.04での実行例です)

$ python3-config --cflags --ldflags -I/usr/include/python3.6m -I/usr/include/python3.6m -Wno-unused-result -Wsign-compare -g -fdebug-prefix-map=/build/python3.6-EKG1lX/python3.6-3.6.5=. -specs=/usr/share/dpkg/no-pie-compile.specs -fstack-protector-strong -Wformat -Werror=format-security -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -L/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu -L/usr/lib -lpython3.6m -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions

これを、そのままgcc実行時に引数として渡します。
また、pythonモジュールをコンパイルする時には「-fPIC」オプションも指定します。

bash

1gcc -fPIC python.c $(python3-config --cflags --ldflags)

もしくは、

bash

1gcc -fPIC python.c `python3-config --cflags --ldflags`

なお、Cの知識が浅いとの事ですが、PythonのC言語のAPIはそれなりの知識がないと難しいと思いますので、まずはCの勉強をしっかりとすることをおすすめします。

投稿2018/09/13 12:24

katsuko

総合スコア3471

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uriuri

2018/09/13 16:45

gcc -fPIC python.c $(python3-config --cflags --ldflags) を用いてコンパイルできました ./a.out で実行した結果 ./a.out: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory となり ldd a.outで linux-vdso.so.1 => (0x00007ffdedb66000) libpython3.6m.so.1.0 => not found libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbc83c3c000) /lib64/ld-linux-x86-64.so.2 (0x00007fbc84006000) not foundを見つけることにしました find -name libpython3.6m.so.1.0 ./anaconda3/pkgs/python-3.6.0-0/lib/libpython3.6m.so.1.0 ./anaconda3/lib/libpython3.6m.so.1.0 この場合シンボリックリンクを作成したいのですが...<参考サイト>https://edn.embarcadero.com/jp/article/36318 ln [オプション ・・・] リンク先  ディレクトリ名 この場合のリンク先はどこになるのでしょうか。 助言いただけると幸いです。
katsuko

2018/09/13 22:58

anacondaをお使いなんですか? だから、環境はしっかりと説明すべきといったはずです。 anacondaは使ったことはないので、私にはわかりかねます。 とりあえず、動的ライブラリのパスが通っていないので、以下を参考にして設定すれば動くでしょう。 http://www.8wave.net/ldconfig.html ただし、anacondaであればanacondaなりの設定があるでしょうから、それはご自身でお調べください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問