vs2015編譯 pybind 動態庫

2021-09-11 01:40:42 字數 1699 閱讀 5211

本人總結:

pyd的檔案、引用 module的名字和 pybind定義的module名字一致,

pybind11_module(pyiotsdk, m)

pybind只需要引用標頭檔案即可。

根據原文,加上自己的總結:

也可以參考:

建立visual sdudio(至少2015)win 32 console工程,選 dll

設定為x64, release

設定專案屬性,

general裡面

target name為你要建立的模組名字,target extension為.pyd,configuration type 為dynamic library (.dll)

確保c/c++ > code generation裡面為multi-threaded dll (/md)

新增include和lib路徑

xx\pybind11-master\include

c:\program files\python35\include

c:\program files\python35\libs

這一步開始編譯沒有錯誤

新增乙個測試.cpp檔案和測試** [1]

#include

#include

#include

const double e = 2.7182818284590452353602874713527;

double sinh_impl(double x)

double cosh_impl(double x)

double tanh_impl(double x)

namespace py = pybind11;

pybind11_module(example, m)

編譯可能提示錯誤#error:  macro clash with min and max -- define nominmax when compiling your program on windows

在c++/preprocessor裡面新增nominmax,再次編譯應該沒有錯誤,會在x64資料夾生成example.pyd

複製到你的python**所在目錄,在**中新增

import example

print(example.fast_tanh2(1.0))

執行,輸出0.7615941559557647

這裡可能匯入不正確,提示importerror: dynamic module does not define module export function (pyinit_example)

這很可能是因為pybind11_module(example, m)與你專案設定的匯出.pyd檔名稱不一致造成的 [2]。

參考[1] 

這裡面提到新增py_limited_api;到preprocessor,但是卻會導致各種編譯錯誤,不知道怎麼解決。

[2] 

VS2015靜態編譯設定

首先必須搞清楚專案 專案屬性 配置屬性 c c 生成 執行庫中四個選項的關係 多執行緒除錯dll mdd 對應 md dynamicdebug 多執行緒dll md 對應 md dynamicrelease 多執行緒 mt 對應 md staticrelease 多執行緒 mtd 對應 md sta...

vs2015編譯dlib,測試

dlib vs2015編譯 測試 使用cmake生成文件 使用vs2015編譯,成功,靜態庫 使用demo測試 include stdafx.h include dlib image processing frontal face detector.h include dlib image io.h...

VS2015編譯ffmpeg總結

安裝vs2015 不在累述 安裝git工具 一直下一步即可 git clone ffmpeg smp project get dependencies.bat vsnasm.zip vsyasm.zip 解壓後 vsnasm vsyasm 通過 vs2015開發人員命令提示 注意通過管理員身份 執行...