我该怎么做(我是一个完全的NOOB,从来没有使用过g++,gcc,mingw等我在互联网上寻找解决我的问题的方法,但没有找到任何东西。除了mingw是一个极简主义GNU对于 Windows...)?我一直在 Windows 上使用 Visual C++,但现在我必须构建将附加到 Windows、Mac、Linux 的 Qt 项目的库。
如果有人知道关于使用编译器以及如何构建库的好教程,我将不胜感激在这里分享:)
谢谢,
愿原力与你同在。
交叉编译的最佳方法是获取要编译的每个操作系统的副本。因此,如果您使用的是 Windows、Mac 和 Linux,我建议您分别购买一台(Mac OS X 的价格约为 25 美元,Linux 是免费的)。然后只需使用附带的编译器(Mac 上的 XCode;Linux 上的 GCC)进行编译即可。不幸的是,当您执行交叉编译时,您需要单独支持每个操作系统(某些部分可以在操作系统之间共享)。
由于您将使用工具包(QT),因此您可能不必太担心平台特定的调用或其他任何事情。只需确保您使用 QT typedef 和结构,而不是 Microsoft Windows 的...
跨平台库的工作是一项困难但并非不可克服的任务。在 Windows 和更多 linuxy 目标之间进行跨平台工作时,最好的工具是 vcpkg。
它将管理跨目标的所有依赖项,包括 Visual Studio/Intel (Windows) 的 MSVC/Clang 以及更多 linuxy 编译器。它具有三元组或编码编译信息的概念,涵盖 x86 与 x64、静态或动态链接(有时甚至是静态与动态 C 运行时)。 您可以通过 vcpkg(在目标硬件/操作系统或虚拟机上)在每个目标上构建所有依赖项。 然后,在 Windows msvc 中,您可以指定用于依赖项的三元组。 如果在 Windows 或 Linux 上使用 CMAKE,请将 CMAKE 指向所需三元组的相应工具链文件。
Vcpkg 有相当不错的教程,一旦我掌握了单独编译所有依赖项的必要性,客观上并不难使用。 并且,在 Linux 中,了解有关 CMAKE 的更多信息。 这些完成了,这是我发现的最简单的工具。
我的库工作主要包括模板和 constexpr 代码,因此除了库本身的 C 运行时之外,我不需要任何依赖项。 我需要 boost 和一些其他依赖项来用于测试应用程序和示例演示,但不需要库本身。
你最终会发现这很棘手。 如果您正在 Windows 上使用静态 C 运行时构建静态库,那么您需要构建所有依赖项,以便它们静态链接,包括 C 运行时(如果您忽略这个细微差别,您可能不会立即注意到问题)。哦,版本需要全面相同。
如果您只想增强性能,也许还需要 facebook folly 等,您可能能够实现这一点(至少在 x64 Intel/AMD 的 Windows 上)。如果使用专有依赖项,则无法从源代码构建......祝你好运!
在 Linux 上,我从未让它在 100% 静态的一切上下文中工作。 向 Linux 专家询问 Windows 和 Linux 在这方面的区别。
vcpkg 的一大优点是,只要您的 deps 支持在该上下文中编译和链接,您就可以使用任何您想要的三元组。 因此,如果您愿意,它可以编译为静态和动态版本。 如果你不能让 Linux 中的一切都静态化。 也许一个 Linux 专家可以教我们一些关于在 Linux 中构建所有静态包含 C 运行时的东西。
希望这能让您开始。 总结