为什么在Windows中编译的库在linux OS中不起作用?

时间:2014-10-01 05:14:12

标签: c++ linux windows

我在windows中构建了一个lib。我的客户端在linux中有一个应用程序。他想使用我的库,但我不想在linux中构建它。我无法使用它。有没有解决方法?

2 个答案:

答案 0 :(得分:3)

因为Linux和Windows有不同的ABIs(请参阅x86-64 ABI)& calling conventionssystem callsstandard C librarystandard C++ library的集合,C ++的标准版本(例如与C++11的一致性),共享库格式(Linux使用{{3传闻Windows使用ELF),甚至是符号(在链接器意义上)是什么或做什么的概念(在Linux上,阅读PE;在Windows上你传闻需要dllexport件事。莱文关于symbol visibility的书解释了差异。在C ++中,linkers and loaders也不同。

我甚至不确定是否记录了Windows上的系统调用集。对于Linux,请参阅name manglingsyscalls(2)代码

最好的方法是将源代码发布为kernel source。然后,您的客户(或其他人)可以编译源代码并使其适应他的需要。

顺便说一句,很可能你无法在Linux上轻松编译你的库。除非你非常仔细地设计你的图书馆(并且知道一点Linux或free software),否则你肯定会遇到POSIX个问题(我不知道哪个)。也许你的程序可能有某些portability,它在Linux和Windows上表现得非常不同。

undefined behaviorQt等多系统框架之上设计,编码和构建自己的库应该有助于实现可移植性。

如果您不熟悉Linux,请阅读Poco

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

答案 1 :(得分:0)

您可以将其设为仅限标题的图书馆。

可能存在交叉编译器,但我甚至不会尝试这样做。