我通常是一名Java开发人员,但我现在正在编写一个C ++库,他们将使用LibCurl。我在C ++世界中非常不知情!
我正在编写的实际上是一个供其他开发人员使用的库(它是用于访问我们的API的客户端代码)。
最终用户是否需要安装libcurl,或者开发人员是否可以将其包含在EXE中或以某种方式打包?
实际上同样如此,我可能会在库中使用QT,是否需要安装它?我猜它的工作方式是开发人员当然需要它,但是一旦编译成二进制它不是必需的吗?不像你需要Jar文件的java ...
为任何帮助干杯, 艾伦
答案 0 :(得分:3)
如果您静态链接libcurl,那么最终用户不需要libcurl,因为它将在编译时直接链接到可执行文件。
如果您动态链接libcurl,那么最终用户确实需要在其系统上安装libcurl并作为共享对象库提供。
但是,你处于不同的位置。您正在编写一个供其他开发人员使用的库。因此,您的最终用户实际上并不是最终用户。在这种情况下,提供动态链接libcurl是“更好的”。
如果您静态链接,那么您的库将在其代码中封装libcurl库的副本。现在假设使用您的库的开发人员也在使用其他10个库,这些库都与libcurl静态链接。该开发人员基本上将在他/她的最终产品中包含10份libcurl。这不是非常有效,因此在开发库时首选动态链接依赖项。
...然而
如果开发人员使用10个不同的库,这些库需要libcurl,但其中一些库需要特定的旧版本/新版本,那么静态链接将非常有用。
希望有帮助...
答案 1 :(得分:2)
可以使用链接statically或dynamically的许多库。 Curl就是其中之一(参见例如this message,我认为这样做是合理的.QT相当大,所以你应该尽可能动态地链接它。但是,即使它可以是{{3} }。
静态链接和动态链接之间的本质区别在于静态链接在应用程序的目标代码中包含库,而在动态链接中,应用程序可以根据需要从安装的系统中访问库。
答案 2 :(得分:0)
我用C ++编写了一个闭源应用程序,它在早期版本中链接到了libcurl。
这是一个错误,因为每个Linux版本都有不同的libcurl。与glibc和libstdc ++相比,它的交叉版本兼容性要低得多。我不想将libcurl库与应用程序一起发送。
我有简单的需求。所以我重写了应用程序来调用curl而不是使用system()。这适用于每个版本的Linux。