如何在共享库中执行某些函数
How to execute some function in a shared library
我想知道,如果某个可执行程序或共享库中的某个函数没有一起编译,程序如何"重新编译"它们。我知道这听起来很困惑,这里有一个更详细的解释:
假设我有一个名为"a"的程序。现在我想把一些额外的编译共享库"B"放在某个指定的位置,这样"A"就可以在其中运行函数,而不需要更改A本身的代码。当然,我也可以使用一些额外的文件,比如txt文件,当然源代码是可见的。我应该如何设计整个系统以使其能够工作?
如果你把它看作是一场游戏,例如一场纸牌游戏,情况如下。你有这个游戏,你坚持纯C++编写(所以你必须编译所有内容)。现在你已经有了公开的游戏。但一些DIY者想在游戏中添加一些新卡(他们无法更改可执行文件本身,因为如果有不止一个DIY呢?)。您可以通过txt或db或其他方式来完成卡数据部分,但对于"效果"部分,您必须对其进行编码并编译。主程序应该如何调用编译库中的卡片"效果"函数?
顺便说一句,我知道我可以用像LUA之类的srpt语言来做这件事,但如果我想用"编译的方式"做呢?
下面是一个更具体的例子:
A.cpp:int main(){FuncA();FuncB();FuncC();…}//和其他
B.cpp:int TheFunction(){….}//就是
该程序不知道"B"的存在,但它的设计是这样的,如果我可以将B编译成某种B.so,并将其放在指定的文件夹中,"a"可以执行TheFunction()
我知道这种声音真的很有影响力,但我想的是:
在编译B时,使用某种方法让编译器生成指向txt文件的某种函数指针列表。程序A读取该文件,并运行指针指向B的函数。
这可能吗?或者我真的理解错了什么?
动态链接不是C++标准所涵盖的内容,因此它的工作方式取决于实现。例如,在Windows上,您可以构建一个DLL,然后使用LoadLibrary()
动态加载它,并获得一个指向要使用GetProcAddress()
调用的函数的指针。其他平台使用不同的API提供类似的功能。
当然,C++是一种静态编译的语言,所以在调用它之前,你需要知道函数的签名。你的程序必须为"插件"定义一些标准函数接口,以便在DLL中实现,以便能够调用原始程序构建后编写的代码。
- 执行函数时导致崩溃的变量
- 在多个时间戳处执行函数
- 程序不会执行函数 c++
- 仅在函数模板中为那些定义了函数的类型执行函数
- 如何在 c++ 的类声明中执行函数?
- 从 std::vector 迭代器中执行函数指针
- 异步 60 秒延迟后C++执行函数?
- 如果发生错误,则返回错误值,否则,继续执行函数
- 执行函数两次
- C++11:如何在 n 秒后在主线程中执行函数
- C++执行函数和 lambda 内部
- 从主线程C 11执行函数调用的线程
- 现代C++执行函数返回指针的方法
- 为什么Win API线程执行函数,而标准线程则没有
- varargs宏以执行函数调用或将其转换为字符串
- 单步执行函数,但不进入VS2017的参数评估
- 加载 Lua 文件并使用变量而不执行函数
- 尽可能在编译时执行函数契约
- 在QT应用程序中创建并执行函数
- 如何使用boostsio_service.post()执行函数并使用数组或指针作为参数