gpt4 book ai didi

适用于 Linux 和 Windows 的 C++ 跨平台动态库

转载 作者:IT老高 更新时间:2023-10-28 12:53:44 28 4
gpt4 key购买 nike

我想写一些跨平台的库代码。

我正在创建一个静态和动态库,大部分开发都是在 Linux 中完成的,我已经在 Linux 中生成了静态和共享库,但现在想生成一个 Windows 版本的静态和动态库,形式为.lib.dll 使用相同的源代码。

这可能吗?我有点担心,因为我注意到生成 Windows .dll 文件需要使用 _dllspec 或源代码中的类似内容。

我正在寻找在 Windows 上编译我的代码的最佳和最快的解决方案。我不需要在 Linux 下编译;我很乐意直接在 Windows 下进行。此外,我正在使用两个外部库,即 Boost 和 Xerces XML,我已经在我的 Windows 和 Linux 系统上安装了它们,所以希望它们不会成为问题。

我真正想要的是拥有一个可以在 Linux 和 Windows 下编译的单一源代码拷贝,以生成特定于每个平台的库。我真的不在乎是否必须编辑我的代码以支持 Windows 或 Linux,只要我可以拥有一个源代码拷贝。

最佳答案

总的来说,您需要关注两个问题:

  1. 要求,在 Windows 上,您的 DLL 显式导出应该对外界可见的符号(通过 __declspec(dllexport)
  2. 能够维护构建系统(理想情况下,不必维护单独的 makefile 和 Microsoft Visual C++ 项目/解决方案)

首先,您需要了解__declspec(dllexport)。在仅限 Windows 的项目中,通常按照我在对 this question 的回答中描述的方式实现。 .您可以通过确保您的导出符号(例如 MY_PROJECT_API)已定义但在为 Linux 构建时扩展为空来进一步扩展此步骤。这样,您可以根据需要将导出符号添加到 Windows 的代码中,而不会影响 linux 构建。

其次,您可以研究某种跨平台构建系统。

如果您对 GNU 工具集感到满意,您可能需要调查 libtool (可能与 automake 和 autoconf 结合使用)。这些工具在 Linux 上受原生支持,在 Windows 上通过 Cygwin 提供支持。或 MinGW/MSYS . MinGW 还为您提供了交叉编译的选项,即在运行 Linux 的同时构建您的 native Windows 二进制文件。我发现对导航 Autotools(包括 libtool)很有帮助的两个资源是 "Autobook"。 (特别是关于 DLLs and Libtool 的部分)和 Alexandre Duret-Lutz's PowerPoint slides .

正如其他人所提到的,CMake也是一种选择,但我自己不能说。

关于适用于 Linux 和 Windows 的 C++ 跨平台动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1235165/

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