C++是否有什么插件功能的库?

2020-02-23 21:13:16 +08:00
 root1iu

各位前辈好,目前想做一个具有插件功能的软件(类似 vim 那样的插件功能),是否有什么框架或者库可以使用?

如果没有现成的库可以用,我的想法是通过动态链接文件来实现:即软件主体读取配置文件,获取配置文件中的插件信息,然后在某个目录下搜寻对应的动态链接文件,利用动态链接文件加载函数加载动态链接文件,然后调用动态链接文件中的接口来启动插件。不知道这个想法是否可行?

3447 次点击
所在节点    C++
25 条回复
ysc3839
2020-02-23 21:27:08 +08:00
不想麻烦的话可以考虑用 pybind11 直接嵌入 Python,用 Python 写插件。
https://github.com/pybind/pybind11
KDr2
2020-02-23 21:30:37 +08:00
maty
2020-02-23 21:47:11 +08:00
嵌入 lua,对 lua 开发的接口可以使用 swig
zhuangzhuang1988
2020-02-23 22:29:48 +08:00
可行, 而且很多软件就是这么做的.
xdeng
2020-02-23 23:10:50 +08:00
augustheart
2020-02-23 23:21:21 +08:00
你这个直接用导出函数开撸就行了,不用考虑库。
因为做库的人不能想到你的插件和软件主体用什么方法沟通,库也没什么用。
itfanr
2020-02-24 08:56:32 +08:00
@xdeng 我和你一样推荐。 https://github.com/visualfc/liteide 这个的插件机制挺好的 可以参考
nightwitch
2020-02-24 14:04:14 +08:00
二进制的插件是邪道,容易碰见 ABI 问题。既然你用过 vim,你应该知道 youcompleteme 在不同平台下有多麻烦。
建议内嵌 Python/lua/javascript 做插件系统,前两个都应该很成熟了,javascript 不熟,不发表意见。
root1iu
2020-02-24 19:07:23 +08:00
@ysc3839 粗略看了一下,似乎不错,谢谢
root1iu
2020-02-24 19:09:56 +08:00
@KDr2 谢谢您,但 Qt 应该不太适合,因为这个软件目前的是要做在服务端的,感觉 Qt 比较适合做客户端图形界面,不知道我的理解是否有误
root1iu
2020-02-24 19:12:13 +08:00
@maty 谢谢,但 lua 并不会,学起来可能要多花点时间了,到时候可以试试
edimetia3d
2020-02-24 19:14:41 +08:00
对性能不敏感的话,我也支持用 python 这样的胶水语言来做插件,ABI 相关的问题都不用自己来解决
root1iu
2020-02-24 19:15:58 +08:00
@zhuangzhuang1988 这么巧吗,但不知道是否会出现 @nightwitch 提到的 ABI 问题,目前还没有试过
root1iu
2020-02-24 19:19:12 +08:00
@augustheart 导出函数应该是指动态链接文件提供的接口吧?不知道这种方法兼容性会不会差一些
root1iu
2020-02-24 19:24:17 +08:00
@itfanr 害,惭愧…像这种源码都不知道从何看起
root1iu
2020-02-24 19:26:03 +08:00
@nightwitch YCM 确实很麻烦,我也有点害怕 ABI 兼容问题,目前似乎有 Python 的解决方案,我先试试,不理想就试一下动态链接库的这种吧
root1iu
2020-02-24 19:28:01 +08:00
嗯,我先试试 Python 的解决方案,不满意再换,感觉解决 ABI 问题需要很深的积累 0.0
zhuangzhuang1988
2020-02-24 20:08:03 +08:00
@root1iu abi 问题也很好解决
学下微软的 COM 解决方案就行了, 有些商业软件在 Linux 上也这么玩的
augustheart
2020-02-24 20:12:27 +08:00
@root1iu binary 的话肯定是需要考虑平台问题的,话说你的主题也没考虑跨平台啊。但你既然考虑 c++,我就默认你 c++一把梭了。
augustheart
2020-02-24 20:13:57 +08:00
@root1iu 类似的东西、各种视频播放器、音频播放器已经有了几十年的使用经验。只是不跨平台。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/646906

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX