Импорт C ++ DLL в python с помощью SWIG и Visual Studio 2017 - PullRequest
0 голосов
/ 10 октября 2019

В настоящее время я пытаюсь импортировать dll c ++ в скрипт на python. Сейчас я хочу импортировать очень простую DLL только с одной функцией (для тестирования). Прорабатывая подробные инструкции из Как создать DLL с помощью SWIG из Visual Studio 2010 , есть две ошибки компоновки, которые я не совсем понимаю.

Все работало до шага25 (с дополнительным определением препроцессора для generated _wrapper.cxx для обхода strcpy на данный момент). Как только я пытаюсь построить проект (все компилируется без проблем), я получаю следующий вывод от VS:

my_f.obj : error LNK2005: "int __cdecl cubes(int const &)" (?cubes@@YAHAEBH@Z) already defined in my_f.obj
Creating library C:\work\example64\my_f\x64\Release\_my_f.lib and object
C:\work\example64\my_f\x64\Release\_my_f.exp
C:\work\example64\my_f\x64\Release\_my_f.pyd : fatal error LNK1169: one or more multiply defined symbols found
Done building project "my_f.vcxproj" -- FAILED.

Я работаю с 64-битной системой и установленный python (3.6)версия x64 (без отладки).

Мой .i файл выглядит следующим образом:

%module cube

%{
#include "my_f.cpp"
%}

%include my_f.cpp

И файл .cpp с кодом является следующим:

#include "stdafx.h"
int cubes(const int &a)
{
    return a * a*a;
}

1 Ответ

0 голосов
/ 10 октября 2019

Я думаю, что нашел решение для этого.

Поскольку у меня не было файла .h, было объявление функции, но нет определения. Чтобы обойти эту ошибку компиляции, либо добавьте файл заголовка, либо объявите функцию как функцию inline.

...