C++库需要LibCurl - 应用程序用户需要安装libcurl吗?

4

我通常是一名Java开发人员,但现在我正在编写一个使用LibCurl的C++库。而在C++领域,我很不熟悉!

实际上,我正在编写的是一个供其他开发人员使用的库(它是用于访问我们API的客户端代码)。

最终用户是否需要安装libcurl,或者开发人员是否可以以某种方式将其包含在EXE文件中或打包到软件包中?

实际上,同样的问题也适用于我可能在库中使用QT,他们是否需要安装它?我猜想它的工作原理是,当然开发人员需要它,但一旦编译成二进制文件,就不再需要了?与Java不同,你需要一直使用Jar文件...

感谢任何帮助, Alan

3个回答

3
如果您将libcurl静态链接,则最终用户不需要libcurl,因为它会在编译时直接链接到可执行文件中。
如果您将libcurl动态链接,则最终用户需要在其系统上安装libcurl并作为共享对象库可用。
然而,您处于不同的位置。您正在编写供其他开发人员使用的库。因此,您的最终用户实际上并不是真正的最终用户。在这种情况下,最好提供与libcurl动态链接。
如果您进行了静态链接,那么您的库将在其代码中封装libcurl库的副本。现在想象一下,使用您的库的开发人员还使用了其他10个库,所有这些库都是静态链接到libcurl。那个开发人员基本上将在他/她的最终产品中包含10个libcurl的副本。这不是很有效率,因此在开发库时首选针对依赖项进行动态链接。
然而...
如果开发人员正在使用需要libcurl的10个不同库,但其中一些库需要比其他库更旧/更新的特定版本,则静态链接将非常有用。
希望这有所帮助...

然而,如果您动态链接,则必须确保您的代码可以与不同版本的libCurl一起使用。否则,如果另一个库需要特定版本,则用户会遇到问题。 - Martin Beckett

2
许多图书馆可以使用静态或动态链接。Curl就是其中之一(例如,请参见this message),我认为这样做是合理的。QT非常庞大,因此如果可能的话,应该动态链接它。但即使如此,它也可以进行静态链接。
静态链接和动态链接之间的本质区别在于,静态链接将库包含在应用程序的对象代码中,而动态链接则使应用程序从其所安装的系统上按需访问库。

0

我用C++编写了一个闭源应用程序,早期版本中链接到了libcurl。

结果证明这是一个错误,因为每个Linux版本都有不同的libcurl。它比glibc和libstdc++跨版本兼容性要差得多。我不想将libcurl库与应用程序一起发布。

我的需求很简单。所以我重写了应用程序,改用system()调用curl。这在每个Linux版本上都可以工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接