簡體   English   中英

如何將c ++程序編譯成共享庫以導入到Python中?

[英]How to compile a c++ program into shared library to be imported into Python?

我通常使用Python但我現在想學習一些關於c ++與Python的接口。 為此,我在c ++中編寫了一個簡單的程序:

#include <iostream>
using namespace std;

int SomeCalculation(float x){
    int decision = 0;
    if (x > 1){
        decision = 1;
    }
    return decision;
}

int main()
{
    float a = 0.5;
    cout << "\n" << SomeCalculation(a) << "\n\n";
    return 0;
}

使用CodeBlocks我編譯它,它運行正常。 我現在想要導入並使用SomeCalculation()到Python中。 據我所知( 從這里 )我需要將cpp程序編譯成一個共享庫,以便在Python中導入。 我發現了這個廣泛的SO線程,但我完全迷失了。

我有一個main.cpp文件(上面的代碼),我需要編譯成.so文件(對吧?)。 我嘗試了以下內容: g++ -fPIC -g -ggdb -c main.cpp -o main.so 然后我嘗試將生成的.so文件導入到我的python程序中,如下所示:

import ctypes
print ctypes.CDLL('main.so').SomeCalculation(2)

但是我收到以下錯誤:

Traceback (most recent call last):
  File "/home/kram/c++/cmod/importcpp.py", line 2, in <module>
    print ctypes.CDLL('main.so').SomeCalculation(2)
  File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: main.so: cannot open shared object file: No such file or directory

因為我從來沒有真正(手動)編譯過一個c ++程序,所以我在命令中丟失了。 有沒有人知道如何將其編譯為共享庫? 歡迎所有提示!

你的.so很好,就目前而言。 但是,Python沒有找到它:

OSError:main.so:無法打開共享對象文件:沒有這樣的文件或目錄


如果需要導入C或C ++模塊而不更改它,可以使用SWIG生成包裝器,或者使用下面提到的Python或Boost.Python機制手動執行。


如果你是從頭開始編寫Python擴展,你會發現它需要一些鈎子來初始化你的模塊,弄清楚它導出的函數等等。

有關詳細信息,請參閱文檔 - 定義了一些宏來幫助您編寫Python所需的鈎子。

在實踐中使用Boost.Python可能更容易,但直接執行它應該可以用於一個簡單的例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM