如何使用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++程序编译为 - 编写脚本
,该脚本导入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>,然后等待它完成。这是两个完全不同的程序,在您的情况下,它们彼此不交谈,也不共享任何共同点。因此它不起作用
一般来说,重新考虑任何涉及
系统的问题。它的主要用途似乎是指出初学者程序员第1部分和第2部分都是C++的,也定义了“只从第一个部分运行,第二个部分从Python运行”,什么语言在做什么?是的,第1部分和第2部分都是C++。但是,有一个Python脚本,它相当于第2部分(每个Python命令最终将通过包装器调用等效的C++方法)。上面已经阐明了“仅运行…”。最简单的方法是包装第1部分,然后使用Python脚本调用包装的第1部分,然后调用Python第2部分。这意味着程序从Python开始,而不是C++。C++的输入是可能的,但更令人恼火的是完成。不,亚当,我道歉,但是你似乎不理解我的问题。我完全知道怎么做你要我做的事。我在问题的开头告诉过你。当你说“启动另一个进程”和“两个完全不同的程序”时,我很抱歉,这就是使用共享库的全部意义——这就是为什么它应该起到我正在尝试的作用,因为共享库。所以。它们应该允许在进程之间共享符号。是的,我确实必须嵌入。是的,我不懂电脑是如何工作的(想想,我可能还是不懂)。谢谢你,亚当。