在C语言中进行应用程序开发时,我有点天真。我一直在为我正在编写的编程语言编写大量代码,我想要包含来自ICU的东西(用于国际化和unicode支持) )。
问题是,我不确定是否存在包含第三方库的约定。对于像readline这样的东西,许多系统可能已经安装了它,只是链接到它是安全的(我认为)。但是如果我想在我自己的代码中包含一个版本的库呢?这是常见还是我认为这一切都错了?
答案 0 :(得分:2)
如果您的代码需要第三方库,则需要在构建之前检查它们。在Linux上,至少使用开源,这样做的规范方法是使用Autotools编写配置脚本,查找库的存在以及如何使用它们。值得庆幸的是,这是非常自动化的,有很多例子。基本上你写了configure.ac
(和/或Makefile.am
),它们分别是autoconf
和automake
的源文件。它们已转换为configure
和Makefile.in
,./configure
有条件地使用您指定的任何配置时选项构建Makefile。
请注意,这仅适用于Linux。我想在Windows上执行它的规范方法是使用IDE的项目文件...
答案 1 :(得分:1)
如果它是.lib并且它没有运行时链接库,它将被编译到您的代码中。如果需要链接到动态库,则必须确保它们提供安装程序或将用户指向他们可以获取它们的位置。
答案 2 :(得分:1)
如果您正在讨论将软件运送给最终用户并担心依赖性 - 您必须向他们提供正确的软件包/安装程序,其中包含运行软件所需的依赖项,或者确保用户可以获取它们(根据当地法律,出口法律等等,但这都是关于许可的。)
您可以在ICU中构建您的软件和静态链接以及您使用的任何其他内容,或者您可以运送您的软件和ICU共享库。
答案 3 :(得分:1)
这取决于您要定位的操作系统。对于Linux和Unix系统,您通常会看到动态链接,因此应用程序将使用已安装在系统上的库。如果您这样做,这意味着如果用户尚未拥有库,则由用户来决定。如果您以发行版的包格式打包应用程序,Linux中的程序包管理器将为您执行此操作。
在Windows上,您通常会看到静态链接,这意味着应用程序捆绑了库,它将使用该特定版本。许多不同的应用程序可能使用相同的库,但包含自己的版本。因此,您可以在系统中放置多个库副本。
答案 4 :(得分:1)
使用您的代码发送库副本的问题在于您无法免费获得库的维护者错误修复的好处。隐藏的,小的和不受支持的库通常值得静态链接。否则,我只需添加依赖项并确保您发送的任何软件包都表明它是正确的。