Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SWIG在进程和被调用的脚本子进程之间共享库? 我有一个C++程序 FoBoA< /C> >从主()/开始,然后控制流经过第一部分,然后是程序的第二部分。如果我将main更改为foobar\u main,我就可以将整个程序和SWIG Python包装编译到共享库foobar.so,并将其导入Python,从Python内部调用foobar\u main,一切正常 第二部分通过一些可尊敬的C++结构与第一个部分进行通信。具体来说:第一部分创建一些类的单个对象,第二部分使用类静态方法来获取这些对象_C++_Python_Shared Libraries_Swig - Fatal编程技术网

如何使用SWIG在进程和被调用的脚本子进程之间共享库? 我有一个C++程序 FoBoA< /C> >从主()/开始,然后控制流经过第一部分,然后是程序的第二部分。如果我将main更改为foobar\u main,我就可以将整个程序和SWIG Python包装编译到共享库foobar.so,并将其导入Python,从Python内部调用foobar\u main,一切正常 第二部分通过一些可尊敬的C++结构与第一个部分进行通信。具体来说:第一部分创建一些类的单个对象,第二部分使用类静态方法来获取这些对象

如何使用SWIG在进程和被调用的脚本子进程之间共享库? 我有一个C++程序 FoBoA< /C> >从主()/开始,然后控制流经过第一部分,然后是程序的第二部分。如果我将main更改为foobar\u main,我就可以将整个程序和SWIG Python包装编译到共享库foobar.so,并将其导入Python,从Python内部调用foobar\u main,一切正常 第二部分通过一些可尊敬的C++结构与第一个部分进行通信。具体来说:第一部分创建一些类的单个对象,第二部分使用类静态方法来获取这些对象,c++,python,shared-libraries,swig,C++,Python,Shared Libraries,Swig,现在我只想运行main()中的第一部分和Python中的第二部分。也就是说,我想启动C++程序 FoBoA,然后在第一部分完成后,运行一个Python脚本(从C++内部编程),继续第二部分。 为此,我: 将第二部分和SWIG包装编译为foobar2.so < L>用C++ >代码(系统)(“Python FoBAR2.Py”)< /COD> < /LI>替换C++代码的第二部分 < LI>将修改后的C++程序编译为 FoBoAR1.SO 并加载到 FooBar 编写脚本foobar2.py

现在我只想运行
main()
中的第一部分和Python中的第二部分。也就是说,我想启动C++程序<代码> FoBoA,然后在第一部分完成后,运行一个Python脚本(从C++内部编程),继续第二部分。 为此,我:

  • 将第二部分和SWIG包装编译为
    foobar2.so
  • < L>用C++ >代码(系统)(“Python FoBAR2.Py”)< /COD> < /LI>替换C++代码的第二部分 < LI>将修改后的C++程序编译为 FoBoAR1.SO 并加载到<代码> FooBar
  • 编写脚本
    foobar2.py
    ,该脚本导入
    foobar1
    foobar2
    ,然后等效于第二部分
然后我尝试运行
foobar
。它不起作用,因为第二部分中的例程似乎抱怨在第一部分中应该完成的某些步骤没有完成


这令人尴尬,但很明显,我对计算机工作原理的理解存在一些深层次的缺陷:)有人能告诉我我遗漏了什么,包括可能简化上述过程吗

> P>我假设你的C++代码看起来是这样的:

void part1()
{}

void part2()
{}

int main()
{
    part1();
    part2();
}
import foobar

foobar.part1()
py_part2()

和Python版本的<代码> PAR2()/<代码>,它是用一些其他包装的C++函数实现的。如果这些假设是错误的,请告诉我

我认为最简单的方法是包装
part1()
以及其他包装的part2相关函数,然后使用如下Python脚本:

void part1()
{}

void part2()
{}

int main()
{
    part1();
    part2();
}
import foobar

foobar.part1()
py_part2()
这当然意味着程序是用Python启动的。如果你需要启动某个C++程序,由于某种原因(即你需要<代码>主())/代码>,那么为了使用<代码> pythPAR2](<)>代码>,你必须将Python解释器嵌入到C++程序中。这是一个更加困难和复杂的过程


既然您正在学习,我将解释为什么
系统(“pythonfoobar2.py”)
不起作用。在这个方案中,你的C++程序启动另一个进程(程序),命名为“代码> Python < /Cord>,然后等待它完成。这是两个完全不同的程序,在您的情况下,它们彼此不交谈,也不共享任何共同点。因此它不起作用


一般来说,重新考虑任何涉及
系统的问题。它的主要用途似乎是指出初学者程序员