gpt4 book ai didi

c - 库之间的区别以及如何包含它们

转载 作者:行者123 更新时间:2023-11-30 19:17:39 24 4
gpt4 key购买 nike

我正在开发一个 C 代码,它应该可以使用 codeBlocks 在 Linux 和 Windows 下移植。我应该包含 NetCDF C 库和 HDF5 库。

显然,linux 中的库有时是 .so 和 .a。在 Windows 中,无论是 .lib 还是 .dll。它们之间有什么区别,我应该使用哪一种?我在linux下使用了.so并且它可以工作,但我想知道为什么它应该工作。

第二个问题是我包含文件 netcdf.h 和 hdf5.hLinux 中的路径与 .../lib/netcdf.h 和 ..\lib\netcdf.h 不同虽然我知道每次在 Windows 和 Linux 之间切换时都可以更改链接,但我确信应该有一种方法可以避免源代码中没有文件重复的情况。

有人可以告诉我如何处理这个问题吗?

提前致谢。

最佳答案

可执行文件(Windows 中的 PE,Linux 中的 ELF)、静态库、共享库可以有相同的代码主要区别在于它们的编译方式以及加载到内存(执行)的方式

Linux中的“.a”和Windows中的“.lib”做同样的工作,称为静态库,静态库仅在编译时需要,当您使用静态库中的函数时,正在复制函数代码到您生成的可执行文件,因此您在运行可执行文件时确实需要完整的库,这会导致比使用共享库更大的可执行文件。

Linux中的“.so”和Windows中的“.dll”也是一样的,与静态库的区别在于它们的函数不会复制到你的可执行文件中,它们只是在可执行文件中指向它们,所以您将需要运行时可执行文件附近的实际库

第二个问题并不是真正的问题,您可以在 Windows 上使用“/”和“\”,但如果它恰好是一个问题,您可以使用 ifdef 开关:

#ifdef _WIN32 
//Windows based code
#include <windows_headers.h>
#elif __linux
//Linux based code
#include <linux_headers.h>
#else
#endif

P.S:您可以在代码中具有平台差异的任何位置使用 ifdef 开关

关于c - 库之间的区别以及如何包含它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27868633/

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