【发布时间】:2014-08-31 03:29:46
【问题描述】:
我需要为虚拟设备编写一个 xinput 驱动程序,例如http://cgit.freedesktop.org/~whot/xf86-input-random。设备已连接到 LAN。该设备的客户端是用 C++ 编写的。是否可以在此驱动程序中使用 C++ 代码,或者整个项目必须是 C 语言?
【问题讨论】:
我需要为虚拟设备编写一个 xinput 驱动程序,例如http://cgit.freedesktop.org/~whot/xf86-input-random。设备已连接到 LAN。该设备的客户端是用 C++ 编写的。是否可以在此驱动程序中使用 C++ 代码,或者整个项目必须是 C 语言?
【问题讨论】:
Xorg 驱动程序只是遵循一些文档化约定的ELF 共享对象插件。原则上,您如何获得.so 是您自己的事情(如果您有几个世纪的时间可以浪费,理论上您可以一点一点地手动编写它)。
原则上,您可以将libstdc++.so 链接到您的共享对象(因为可以将共享对象链接到其他对象)。我猜你会编译你的插件并将其与g++ 链接,并且可能明确需要与-lstdc++ 链接
但是,我想这可能是不安全的。也许 C++ ABI 需要crt0 执行一些特定的事情。
所以你可能会尝试,但如果某些事情没有按你的意愿工作(例如异常处理),我不会感到惊讶。它可能取决于 C++ 库的版本和 C 库的版本以及编译器的版本......我想它可能与最近的 g++、最近的 libc、最近的 libstdc++ 一起工作得更好。 ...
阅读Drupper's paper: How to Write Shared Libraries
制作您的驱动程序免费软件,并快速发布其源代码,以便您可以从 Xorg 社区获得一些帮助(即使您的驱动程序不完整)。可能使用最近的Xorg....
【讨论】: