【发布时间】:2012-04-12 04:19:33
【问题描述】:
我希望创建一个可供 Linux 和 Windows 客户端使用的 C++ 库。客户端将通过实现库提供的接口来连接操作系统特定的功能。
这有可能实现吗?是否需要在linux中重新编译C++项目。
P.S:我正在使用 CodeBlocks IDE
【问题讨论】:
-
它肯定必须为 Linux 单独编译。
标签: c++ linux dll window shared-libraries
我希望创建一个可供 Linux 和 Windows 客户端使用的 C++ 库。客户端将通过实现库提供的接口来连接操作系统特定的功能。
这有可能实现吗?是否需要在linux中重新编译C++项目。
P.S:我正在使用 CodeBlocks IDE
【问题讨论】:
标签: c++ linux dll window shared-libraries
简短的回答是否定的,您仍然需要为每个目标平台编译库 - 但是,假设您的代码是跨平台编写的,您可以将构建设置为同时针对 Windows 和 Linux 环境小题大做。我现在使用 CMake 来生成适用于 Windows 环境的 Visual Studio 项目和适用于 Linux 环境的 Makefile。
【讨论】:
我很确定 Linux 不会接受 .dll :) 是的,您需要重新编译。除非您在 linux 下将 windows 作为虚拟机运行,否则会抢占问题。
【讨论】:
肯定不能是同一个二进制文件:Linux 上的共享对象 ELF 格式,Windows 上的 DLL "PE" 格式。动态加载在两个系统上具有不同的语义。详情见Levine's linker and loader书。
如果仔细操作,您可以使用相同的源代码提供两个不同的文件(Windows 上的 DLL,Linux 上的动态共享对象)。
但您可能需要一些条件编译技巧,例如#ifdef WINDOWS 等...
您可以使用为此类事物提供通用抽象的库。例如,GTK/Glib 和 Qt 都有一些机制,提供动态链接(或动态加载 - 即dlopen-ed)库的通用抽象。
您可能想阅读Program Library Howto(至少对于 Linux)。
【讨论】: