我在windows中构建了一个lib。我的客户端在linux中有一个应用程序。他想使用我的库,但我不想在linux中构建它。我无法使用它。有没有解决方法?
答案 0 :(得分:3)
因为Linux和Windows有不同的ABIs(请参阅x86-64 ABI)& calling conventions,system calls,standard C library,standard C++ library的集合,C ++的标准版本(例如与C++11的一致性),共享库格式(Linux使用{{3传闻Windows使用ELF),甚至是符号(在链接器意义上)是什么或做什么的概念(在Linux上,阅读PE;在Windows上你传闻需要dllexport
件事。莱文关于symbol visibility的书解释了差异。在C ++中,linkers and loaders也不同。
我甚至不确定是否记录了Windows上的系统调用集。对于Linux,请参阅name mangling和syscalls(2)代码
最好的方法是将源代码发布为kernel source。然后,您的客户(或其他人)可以编译源代码并使其适应他的需要。
顺便说一句,很可能你无法在Linux上轻松编译你的库。除非你非常仔细地设计你的图书馆(并且知道一点Linux或free software),否则你肯定会遇到POSIX个问题(我不知道哪个)。也许你的程序可能有某些portability,它在Linux和Windows上表现得非常不同。在undefined behavior或Qt等多系统框架之上设计,编码和构建自己的库应该有助于实现可移植性。
如果您不熟悉Linux,请阅读Poco。
PS。自20世纪80年代以来,我从未在任何Microsoft操作系统上使用或编码。我从1985年开始使用Unix,自1993年开始使用Linux
答案 1 :(得分:0)
您可以将其设为仅限标题的图书馆。
可能存在交叉编译器,但我甚至不会尝试这样做。