静态链接与动态链接的建议
Advise needed for Static vs Dynamic linking
我有一个Python代码,需要能够执行一个c++代码。我对创建库的想法很陌生,但是从我学到的到目前为止,我需要知道我是否需要使用静态或动态链接。
我已经阅读了两者的利弊,但是有很多术语我还不理解,因为我需要尽快做这件事,我想知道是否有人可以简单地向我解释一下。
情况是这样的。我的c++代码生成了一些包含数据的文本文件。然后,我的Python代码使用这些文本文件绘制数据。作为初学者,我需要能够从Python直接运行c++代码。DLL比SL更合适吗?还是我完全搞错了方向?
额外:是否有可能在我的c++代码中编辑变量,编译并执行它,全部直接从Python?
这取决于您想要的部署。如果使用动态链接,则需要仔细管理路径上的库(.so
、.dll
),并确保加载了正确的版本。如果在文件名中包含版本号,这可能会有所帮助,但这也有其自身的问题(安全…显示代码的版本号是个坏主意)。另一个好处是,只要接口没有改变,就可以在不重新编译的情况下交换库的功能。
.exe
)。我建议您从开始,直到您需要移动到更复杂的共享库设置。
编辑:我不明白你的"额外学分"问题。你说的"编辑值"是什么意思?如果你的意思是你可以修改在c++代码中声明的变量,那么是的,你可以,只要你使用部分公共接口来做这件事。顺便说一句,这个建议是为一般的决定。如果你从Python链接到C/c++,我认为你需要使用共享库。我不确定,因为我自己没做过。
编辑:展开"公共接口"。当您创建任何类型的c++库时,您都要指定外部类可以使用哪些函数(请查看如何使用这些函数)。这就是我所说的公共接口。你的库的一部分是不可访问的,但其他(你指定的)可以从客户端代码(即你的python脚本)调用。这允许您修改存储在内存中的值。
如果你真的想在你的python中编辑实际的c++代码,我建议你应该重新设计你的应用程序。您应该能够通过提供适当的配置来定制您的c++库的运行时行为。
如果你能给出一个具体的例子,我们就能给你更好的建议。
这是可能的!
尝试在python中探索子进程模块。
下面可以是您的场景的示例实现:
yourfile.cpp
#compilation
args = ['g++','-o','your_executable_name_with_path','yourfile.cpp_with_path']
your_compile = subprocess.Popen(args,stdin=subprocess.PIPE,stderr=subprocess.PIPE,stdout=subprocess.PIPE)
output,compilation_error = your_compile.communicate()
your_compile.wait()
#successful compilation then there will be execuatble
if not compilation_error:
#execuation
args = ['your_executable_name_with_path'] #command to run a an execuatble
your_run = subprocess.Popen(args,stdin=subprocess.PIPE,stderr=subprocess.PIPE,stdout=subprocess.PIPE)
your_code_output,runtime_error = your_run.communicate()
your_run.wait()
此外,您可以处理更多的情况,并提出一个有效的设计
我不太确定链接的想法是如何进入你所问的,但听起来你想使用像SWIG这样的东西,它允许你在c++函数(和许多其他语言)周围创建包装器,然后你可以直接从Python代码调用。
额外:是否有可能在我的c++代码中编辑值,编译它并直接从Python执行?
如果我理解正确,你想用Python来改变你的c++代码,然后编译和执行它?如果是这种情况,您可能需要考虑在c++程序中嵌入Python解释器。这意味着用另一种方式来做事情,让c++运行你的Python脚本,而不是试图从Python做所有的事情。
- g++用户定义的动态链接库上的全局new和delete运算符
- 如何使用C++导出制作动态链接库
- 链接 c++ 动态库一直失败
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 动态链接库中C++回调函数
- 如果同时存在共享库和动态库,则链接器将首选哪个库?
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 如何动态链接 grpc 库 c++?
- 如何在Windows上链接动态构建的cmake文件
- 当我链接动态库而不是静态库时,CMake 有效
- 在MacOS上使用Bazel链接动态库
- 链接动态库
- 链接动态和静态库 RCPP
- Windows C++Eclipse MinGW链接动态和静态库
- 如何根据另一个动态库链接动态库
- 从另一个 dll 链接动态 dll 会导致错误
- 链接动态库时出错.所以使用Lua
- G++:链接动态(dylib)库
- Qt - 帮助链接动态库