gpt4 book ai didi

c++ - 为什么在 Windows 中编译的库在 Linux 操作系统中不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 05:38:40 25 4
gpt4 key购买 nike

我在 Windows 中构建了一个库。我的客户有一个Linux 上的应用程序。他想使用我的库,但我不想在 Linux 中构建它。我的无法使用它。有什么解决办法吗?

最佳答案

因为Linux和Windows有不同的ABIs (参见x86-64 ABI)和calling conventions ,一套 system calls , standard C library , standard C++ library 、C++ 标准版本(例如,符合 C++11 )、共享库格式(Linux 使用 ELF ,Windows 据说使用 PE ),甚至符号(在链接器意义上)是什么或做什么的概念(在 Linux 上,阅读 symbol visibility ;在 Windows 上,据说您需要 dllexport事)。 Levine 的书 linkers and loaders解释其中的差异。在 C++ 中,name mangling也不同。

我什至不确定 Windows 上的系统调用集是否已记录。对于 Linux,请参阅 syscalls(2)kernel source代码

最好的方法是将源代码发布为 free software 。然后,您的客户(或其他人)可以编译源代码并根据他的需要进行调整。

顺便说一句,您可能无法在 Linux 上轻松编译您的库。除非您非常仔细地构建您的库(并且了解一点 Linux 或 POSIX ),否则您肯定会遇到 portability 。问题(我不知道是哪个)。也许你的程序可能在某个地方有一些 undefined behavior它在 Linux 和 Windows 上的行为非常不同。

在一些多系统框架(如Qt)之上设计、编码和构建您自己的库或Poco应该有助于可移植性。

如果您不熟悉 Linux,您应该阅读 Advanced Linux Programming .

PS。自 20 世纪 80 年代以来,我从未在任何 Microsoft 操作系统上使用过或编码过。我从 1985 年开始使用 Unix,从 1993 年开始使用 Linux

关于c++ - 为什么在 Windows 中编译的库在 Linux 操作系统中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26134534/

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