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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

3566閲覧

外部シンボル PyInit__cutil は未解決です

TomoeMagica

総合スコア5

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/04/08 07:31

色恒常性仮説に基づいた画像色補正ライブラリ
colorcorrect

https://github.com/shunsukeaihara/colorcorrect
Pythonの2系にのみ対応しています

Python 3.7,6でbuildしようとして
py setup.py build したら

外部シンボル "PyInit__cutil" は未解決です。
と言うエラーが出ました。

一部cppで書かれていて、速度が必要な部分はC++で書いたものをnumpy.ctypesでラップして呼び出しています。

依存ライブラリはPILとnumpyのみです。Python 3.7.6なのでPillowをインストールしています。

外部シンボル PyInit__cutil は未解決です。と言うエラーを消すにはどうしたらいいのでしょうか?
外部シンボル PyInit__cutil はCPPのソースにありますか?pythonのソースにありますか?

PyInit__cutilはCPPとPythonのソースを検索したが、見当たりませんでした

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

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

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

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

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

guest

回答3

0

ベストアンサー

OSが書かれていませんが、Windowsですか?
そうであれば、python3に対応していない以前に、Windowsに対応していないからだと思います。

とりあえず簡単な解決法は、他のOSにするか、cygwinやWSLなどのlinuxサブシステムを使うことです。


PyInit_<モジュール名>」(python2であれば「init<モジュール名>」)というのは、拡張モジュールの初期化関数です。
ソースコードにこの関数がないと、unix系のOSであればビルドができますが、インポートできません。
しかし、Windowsの場合、今回のようにビルドの時点でエラーになります。
(理由はわかるが、説明が長くなるので、省きます。)

そもそも、(unix系のOSでも)ビルドができてもインポートできなければ使い物にならないだろう、という話なのですが、ちょっと中身を見てみると、おそらく使用しているのは「src/colorcorrect/algorithm.py」の中の、以下の部分だと思います。

python

1import os 2cutilfolder = os.path.abspath(__file__).rsplit(os.path.sep, 1)[0] 3cutilname = "_cutil" 4libcutil = np.ctypeslib.load_library(cutilname, cutilfolder)

正直numpyは知りませんので憶測になりますが、おそらくこれを見る限り、別に拡張モジュールとして使用しているわけではなく、単純に動的ライブラリとして使用しているだけかと思われます。

ですので、別の対処としては、

  • setup.py」の以下のように拡張モジュールの作成は無効にして、インストールする。

python

1# Extension( 2# 'colorcorrect._cutil', [ 3# 'cutil/cutil.cpp', 4# ], 5# include_dirs=['cutil'], 6# libraries=libs, 7# extra_compile_args=[], 8# ),
  • cutil/cutil.cpp」は通常のDLLとして別の方法でビルドし、インストールしたディレクトリ以下に「_cutil.dll」という名前でコピーする。

(DLLの作り方は、調べてください)

で動くかもしれません。
(最も、python3での動作保証はないのだから、他にも問題はあるかもしれませんが)

投稿2020/04/08 12:12

katsuko

総合スコア3538

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

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

TomoeMagica

2020/04/08 15:51

OSはWindowsです。確かにWindowsでの動作確認は取れていません 回答どうもありがとうございました
TomoeMagica

2020/04/08 16:27

DLLの作成方法を調べたら、Visual Studio で出来ました
guest

0

Python からカスタムの DLL を利用する
https://python.keicode.com/advanced/ctypes-custom-dll.php

Windows での DLL の作成方法
DLL を Python から利用する

cutil.cppに以下追加

void PyInit__cutil();

void PyInit__cutil(){
}

フルに機能を使用している訳ではありませんが、使用機能の範囲では、Windows、Python 3.7.6で動作しました

回答どうもありがとうございました

投稿2020/04/25 20:15

TomoeMagica

総合スコア5

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

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

0

Python からカスタムの DLL を利用する
https://python.keicode.com/advanced/ctypes-custom-dll.php

Windows での DLL の作成方法
DLL を Python から利用する

cutil.cppに以下追加

void PyInit__cutil();

void PyInit__cutil(){
}

フルに機能を使用している訳ではありませんが、使用機能の範囲では、Windows、Python 3.7.6で動作しました

回答どうもありがとうございました

投稿2020/04/22 04:40

編集2020/04/25 20:12
TomoeMagica

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問