假设编译的代码实际上是可移植的(只是使用标准库的东西或其他什么),我可以在多个平台上为我的项目使用相同的 .lib
吗,或者它们只能在他们的平台上运行吗编译于?
我正在将我的 C++ 项目从 Windows 移植到 Linux,我使用了一些第 3 方库,包括 openAL、FreeType 和 FreeImage,我想知道我是否必须获取/重新编译新的库文件。
最佳答案
Windows 和 Linux 上的动态链接器以完全不同的方式工作。在 Linux 上,链接器需要 elf 格式的 .so 文件。然而,Windows 使用不同的、不兼容的格式的 .lib 和 .dll 文件。
即使您找到解决此问题的方法,两个操作系统之间的默认调用约定也不同。 C 函数调用将参数放入不同的寄存器中,因此如果编译器不使用自定义调用约定,就不可能调用这些 lib 文件中的函数,但是这会阻止任何其他代码调用您的库。
Wine Project已经创建了一个兼容层,以允许 Windows 二进制文件调用为 Linux 编译的库,但是这样的层有显着的性能和复杂性损失。
简而言之,在几乎所有情况下,您最好分别为两个操作系统重新编译项目。您提到的库 (afaik) 也都可用于 Linux,因此移植应该是一件轻而易举的事。
关于c++ - C 和 C++ .lib 文件是否可移植?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569439/