Используйте SWIG для. cpp, который зависит от другого. cpp - PullRequest
0 голосов
/ 03 марта 2020

У меня есть файл. cpp, который вызывает другой файл. cpp. Я хочу использовать SWIG для создания оболочки Python для этого. Как мне сделать это с помощью SWIG. Когда у меня был один файл. cpp, я смог создать .so следующим образом:

//app.cpp
#include "app.hpp"
int p(int a)
{
std::cout<<"hello...SWIG runs fine!"<<std::endl;
return a;
}


//app.hpp
#include <iostream>
int p(int a);


//app.i
%module app
%{
#include "app.hpp"
%}
%include "app.hpp"

Запущены следующие команды:

  • swig -c ++ - python app.i

  • g ++ -Isr c -fPI C -I /../../. ./../usr/include/python3.6m -I /../../../../ usr / include / x86_64- linux -gnu / python3 .6m -l python3 .6m - c app. cpp app_wrap.cxx

  • g ++ -shared -fPI C -o _app.so app.o app_wrap .o

Мне удалось создать файл .so с помощью этого метода. Однако теперь моему приложению. cpp необходимо использовать функцию, определенную в другом файле. cpp file (функция с именем int fn1 (int x) в hello. cpp) . Как мне создать .so сейчас? Если бы кто-нибудь мог привести небольшой пример, это было бы здорово!

РЕДАКТИРОВАТЬ: : Кто-то предложил мне использовать SWIG и CMAKE вместе. Это правда? Если да, как я могу это сделать?

1 Ответ

0 голосов
/ 04 марта 2020

Решено!

swig -c ++ - python file1.i

g ++ -Ir c -fPI C -I /../ .. /../../usr/include/python3.6m -I /../../../../ usr / include / x86_64- linux -gnu / python3 .6m -l python3 .6m - c file1. cpp file2. cpp file1_wrap.cxx

g ++ -shared -fPI C -o _file1.pyd file1.o file2.o file1_wrap.o

Оказывается, мы можем использовать CMake для определения зависимостей и выполнять этот процесс автоматически. Кроме того, SWIG может использоваться с CMake, как указано в документации SWIG Введение_build_system

...