为什么项目中没有包含必要的头文件?
Why aren't necessary header files included in the project?
我经常下载一个 C/C++ 项目并尝试编译它只是为了玩它。 make
或 configure
命令几乎 100% 的时间都失败了,我沿着依赖树走了一半,遇到了一个我不知道如何解决的错误,然后放弃。这可能是一个比头文件更广泛的问题,但 make
过程似乎经常需要在特定位置为特定版本的库提供一些 .h 文件,但它们不存在在我的系统上。
如果项目需要这些特定的头文件,为什么作者不将它们复制到项目源代码树中呢?一般来说,要求以这种特定方式设置开发机器不是很疯狂吗?如果有人想要处理两个项目,并且他们需要头文件的版本冲突怎么办?
一个明显的解决方案是在构建过程中包含一个 Dockerfile,但我首先想知道这种情况是如何出现的,以及是否有一些理由不只包含必要的头文件,这看起来像至少是部分解决方案。
头文件有什么用?您需要实际的库,而不仅仅是头文件。
那么他们为什么不包括整个图书馆?
有些图书馆很大。比程序大很多。
因为比较大,编译时间比较长
您不希望为每个项目在计算机上安装每个库的单独副本。这是对 space 的浪费,如果两个不同的版本试图相互通信会怎样?
库得到更新,您不希望每次库更新时都必须更新您的项目。
版权意味着您不能在未经许可的情况下合法地赠送图书馆的副本。通常图书馆的创建者会授予您许可。有时他们不会。
我经常下载一个 C/C++ 项目并尝试编译它只是为了玩它。 make
或 configure
命令几乎 100% 的时间都失败了,我沿着依赖树走了一半,遇到了一个我不知道如何解决的错误,然后放弃。这可能是一个比头文件更广泛的问题,但 make
过程似乎经常需要在特定位置为特定版本的库提供一些 .h 文件,但它们不存在在我的系统上。
如果项目需要这些特定的头文件,为什么作者不将它们复制到项目源代码树中呢?一般来说,要求以这种特定方式设置开发机器不是很疯狂吗?如果有人想要处理两个项目,并且他们需要头文件的版本冲突怎么办?
一个明显的解决方案是在构建过程中包含一个 Dockerfile,但我首先想知道这种情况是如何出现的,以及是否有一些理由不只包含必要的头文件,这看起来像至少是部分解决方案。
头文件有什么用?您需要实际的库,而不仅仅是头文件。
那么他们为什么不包括整个图书馆?
有些图书馆很大。比程序大很多。
因为比较大,编译时间比较长
您不希望为每个项目在计算机上安装每个库的单独副本。这是对 space 的浪费,如果两个不同的版本试图相互通信会怎样?
库得到更新,您不希望每次库更新时都必须更新您的项目。
版权意味着您不能在未经许可的情况下合法地赠送图书馆的副本。通常图书馆的创建者会授予您许可。有时他们不会。