1

Python でラップされた C++ コードをダウンロードし、ソースからビルドしようとしましたが、エラーなしでコンパイルされましたが、最終結果を実行すると、少なくとも 1 つが見つからなかったことを示唆するように失敗しました。リンクするはずだったライブラリ。

驚いたことに、distutils.core.Extensionではライブラリのリストを指定できますが、ライブラリの 1 つが存在しないことを知らせるエラーやメッセージは表示されません。意味不明な文字列をリストに入れることができ、それでもエラーなしで実行されます。にこれの設定はありますExtensionか?または他の確認方法はありますか?

参考までに、setup.pyコードは次のとおりです (Ubuntu 14.04、Python 2.7)。

coolmodule = Extension('cool',
    sources = [
        'cool/main_python.c'
    ],
    libraries = [
        'cool',
        'stdc++'
        'lapack',
        'blas',
        'gfortran',
        'fftw3',
        # if I add any gibberish string to this list,
        # it still runs without error!
    ],
    library_dirs = ['./build'],
    extra_link_args = [
        './build/libcool.a'
    ]
)

setup(name = 'cool',
    ext_modules = [coolmodule]
)

前もって感謝します!!

4

1 に答える 1

0

Python モジュールとしてインポートする共有ライブラリを作成していますか? その場合ldd、Linux/Unix のユーティリティを使用して、モジュールに必要な共有ライブラリを確認できます。Mac OS X では、同等のツールは次のとおりです。otool -L

(test)MacBook-Air-2:foo talumbau$ otool -L foo_ext.so
foo_ext.so:
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
        /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 2577.0.0)

共有ライブラリが他のライブラリを必要としていて、それらが見つからない場合、lddまたはどのライブラリが表示されるかotool -Lを示します。次に、それらを追跡してLD_LIBRARY_PATH、ロード時にリンクされるように変更できます。

于 2014-09-19T21:34:46.433 に答える