gpt4 book ai didi

c++ - 如何通过 dlopen() 将插件链接到应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:12 25 4
gpt4 key购买 nike

我正在为应用程序编写插件。应用程序将使用 dlopen() 加载插件。该平台是 Fedora Linux 11。我有该应用程序的所有源代码。

我已成功将我的代码添加到应用程序中,并且链接正常,因为整个应用程序是同时链接的。但是,最终我希望我的代码成为一个单独的插件。

我在将代码构建为插件时遇到问题。我将其构建为共享 (.so) 库。我的代码自然会引用应用程序中的符号,因此我需要使用 g++ -L-l 指定插件链接到的库选项。但是,接受我的插件的应用程序是单个可执行文件,而不是一组 .so 库。

我在这里遗漏了一些基本要点。如何链接我的插件?

请注意,我仍在尝试构建我的插件——我还没有达到尝试使用 dlopen() 加载它的地步。

解决方案:谢谢大家的回答。我使用了 nemo 建议的 --just-symbols 方法,效果很好。谢谢!

最佳答案

一种方法是不要让插件直接链接到符号。 dlopen() 能够使用 NULL 路径将当前进程加载为“库”,但这需要在 GCC 中设置 -rdynamic 标志。这就是 Glade 的工作方式,当您在各种 XML 文件中设置回调时,它就会“神奇地”工作。

另一种方法是将一组函数指针传递给插件,这样它就不必链接到它们。这当然需要为这种事情设计插件架构。

关于c++ - 如何通过 dlopen() 将插件链接到应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6193302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com