【问题标题】:How to dynamically load C++ function如何动态加载 C++ 函数
【发布时间】:2012-12-13 21:30:15
【问题描述】:

我有一个 C++ 应用程序,如何从 test.cpp 函数加载函数并执行它?我需要适用于 Windows 和 Linux 的解决方案。我需要这个,因为我的应用程序用户应该根据他们的需要更改此功能。

谢谢!

【问题讨论】:

  • 你的意思是不编译就调用它?
  • 或者,您的意思是从共享对象(如dll)加载它?
  • @Nick,是的,我需要在不编译应用程序的情况下启动函数
  • 您可以将其编译到共享库并即时链接,但这会带来一些几乎无法克服的安全问题。
  • 如果 python 是一个选项,请查看boost.org/doc/libs/1_52_0/libs/python/doc

标签: c++ function dynamic load


【解决方案1】:

这在纯 c++ 中几乎是不可能的。这是因为您必须先编译您的函数。当你有一个对象时,你可以动态地将它链接到你的程序中,但这不是你打算做的,我期望。

您可能希望查看诸如 LUA 等脚本语言,这些语言具有可在 c++ 中使用的详细记录的 API(以及其他)

你也可以在你的应用程序中提供 gcc 并从应用程序本身调用它(exec..())但这很重。

【讨论】:

  • 这确实是可能的,但可能不值得这么麻烦。
  • 他还可以研究 C 和 C++ 解释器(有一些)。
  • 可能不应该使用像“不可能”这样有力的词。只要你有决心,几乎一切皆有可能。
  • 没错,但它们很重。
  • @LokiAstari 你是对的。如果先生。克宁厄姆和先生。里奇已经表现出我刚才表现出来的态度,我们都不会在这里。
【解决方案2】:

在共享库 "dll or so"linux" " 中创建此函数,然后您可以使用 "extern" 和库 (.lib) 或 'LibraryLoad (Windows) 或 dlopen (linux)" 动态调用它。这是在 c++ 中做的方式 .. 但你必须让你的函数调用从你的程序中理解为静态的 ..

【讨论】:

  • 而且您的客户系统上必须有编译器。
  • 这取决于您将如何交付库..如果是您开发它,或者第三方,那么您可以将其发送给他们,他们所要做的就是设置路径,另一种方式是他们将代码发送给您,然后您编译它 - 如果可能的话 - 或者如果这不可能,那么只需给他们编译器指令、库路径和函数结构..
  • 就是这样,他们必须编译代码并将库放在特定路径中......但是您可以在代码中调用编译器,以便他们可能只放置 c++ 代码,这可以是在 windows 和 linux 中完成,但在 linux 中要容易得多,但我认为这不是一个好主意,除非你交付带有编译器的包(特别是 windows 并确保客户端有 gcc,如果 linux),但又一次这是一个糟糕的安全设计.. 另一种方法是你提供一个脚本(Windows 中的 bat 文件)
  • 或任何 linux 中编译其代码并生成动态库并将其存储在正确路径或在某些配置文件中设置路径的脚本
  • 我同意你在 Linux 下的观点,因为至少应该是一个编译器。但是windows没有,这也是作者说的问题之一。
猜你喜欢
  • 2020-02-23
  • 1970-01-01
  • 2010-11-14
  • 2011-05-26
  • 1970-01-01
  • 2011-09-06
  • 2012-01-31
  • 2020-08-26
  • 2013-01-19
相关资源
最近更新 更多