Библиотека Python, изготовленная с Pybind11 из Go Code Importror: Dynamic Module не определяет функцию экспорта модуляC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Библиотека Python, изготовленная с Pybind11 из Go Code Importror: Dynamic Module не определяет функцию экспорта модуля

Сообщение Anonymous »

tldr Я пытаюсь сделать простую библиотеку Python, которая запускает код GO через Pybind11 и Cmake < /p>
Я установил pybind11 через Anaconda в venv goscrapper < /code>
Ide Is vscode < /p>
. add.go
[*] run go build -o addlib.dll -buildmode = c -shared add.go , чтобы получить addlib.dll и addlib.h
[*] create addlib.cpp
[*] add the paths11
[*] paths>
[*] paths1
Python.h и pybind11config.cmake (я продолжал получать ошибку cmake: «Не удалось найти файл конфигурации пакета, предоставленный« pybind11 »с любыми
из следующих имен:
pybind11config.cmake") и rancmake .. и rancmake .. и rancmake .. и rancmake .. и rancmake .. и rancmake .. и rancmake .. и rancmake и cdamake. и Cmake -build. в каталоге Project_Root/Build с использованием командной строки разработчика MSVC для VS 2022

Вот мой код
add.go/strong>>package main

import "C"
import "fmt"

//export Add
func Add(a int, b int) int {
return a + b
}

//export Greet
func Greet() {
fmt.Println("Hello world")
}

func main() { }

addlib.cpp

#include

extern "C" {
#include "addlib.h"
}

namespace py = pybind11;

int add(int a, int b) {
return Add(a, b);
}

void greet() {
Greet();
}

PYBIND11_MODULE(Go_Pybind_practice_v2, m) {
m.def("add", &add, "Add two integers");
m.def("greet", &greet, "Print greeting from Go");
}

c_cpp_properties.json
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"C:\\dev\\go_pybind_practice_v3\\pybind11\\include\\pybind11", // for pybind11.h
"C:\\Users\\accra\\.conda\\envs\\goscraper\\include", // for Python.h
"C:\\Users\\accra\\.conda\\envs\\goscraper\\Library\\share\\cmake\\pybind11" // for pybind11Config.cmake
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.22621.0",
"compilerPath": "cl.exe",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "windows-msvc-x64"
}
],
"version": 4
}

cmakelists.txt
cmake_minimum_required(VERSION 3.15)
project(go_pybind_practice_v3)

set(pybind11_DIR "C:\\Users\\accra\\.conda\\envs\\goscraper\\Library\\share\\cmake\\pybind11")

find_package(pybind11 REQUIRED)

pybind11_add_module(go_pybind_practice_v3 addlib.cpp)
target_link_libraries(go_pybind_practice_v3 PRIVATE pybind11::module "C:\\dev\\go_pybind_practice_v3\\addlib.lib")

addlib.h
/* Code generated by cmd/cgo; DO NOT EDIT. */

/* package command-line-arguments */

#line 1 "cgo-builtin-export-prolog"

#include

#ifndef GO_CGO_EXPORT_PROLOGUE_H
#define GO_CGO_EXPORT_PROLOGUE_H

#ifndef GO_CGO_GOSTRING_TYPEDEF
typedef struct { const char *p; ptrdiff_t n; } _GoString_;
#endif

#endif

/* Start of preamble from import "C" comments. */

/* End of preamble from import "C" comments. */

/* Start of boilerplate cgo prologue. */
#line 1 "cgo-gcc-export-header-prolog"

#ifndef GO_CGO_PROLOGUE_H
#define GO_CGO_PROLOGUE_H

typedef signed char GoInt8;
typedef unsigned char GoUint8;
typedef short GoInt16;
typedef unsigned short GoUint16;
typedef int GoInt32;
typedef unsigned int GoUint32;
typedef long long GoInt64;
typedef unsigned long long GoUint64;
typedef GoInt64 GoInt;
typedef GoUint64 GoUint;
typedef size_t GoUintptr;
typedef float GoFloat32;
typedef double GoFloat64;
#ifdef _MSC_VER
#include
typedef _Fcomplex GoComplex64;
typedef _Dcomplex GoComplex128;
#else
typedef float _Complex GoComplex64;
typedef double _Complex GoComplex128;
#endif

/*
static assertion to make sure the file is being used on architecture
at least with matching size of GoInt.
*/
typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*)==64/8 ? 1:-1];

#ifndef GO_CGO_GOSTRING_TYPEDEF
typedef _GoString_ GoString;
#endif
typedef void *GoMap;
typedef void *GoChan;
typedef struct { void *t; void *v; } GoInterface;
typedef struct { void *data; GoInt len; GoInt cap; } GoSlice;

#endif

/* End of boilerplate cgo prologue. */

#ifdef __cplusplus
extern "C" {
#endif

extern __declspec(dllexport) GoInt Add(GoInt a, GoInt b);
extern __declspec(dllexport) void Greet();

#ifdef __cplusplus
}
#endif


Подробнее здесь: https://stackoverflow.com/questions/794 ... ynamic-mod
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»