4

我通常是一名 Java 开发人员,但我现在正在编写一个 C++ 库,他们将使用 LibCurl。而且我对 C++ 世界一无所知!

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

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

其实也是一样,我可能会在库中使用 QT,他们需要安装这个吗?我猜它的工作方式是开发人员当然会需要它,但是一旦它编译成二进制就不需要了?与你需要 Jar 文件的 java 不同......

为任何帮助干杯,艾伦

4

3 回答 3

3

如果静态链接 libcurl,则最终用户不需要 libcurl,因为它将在编译时直接链接到可执行文件。

如果动态链接 libcurl,则最终用户确实需要将 libcurl 安装在他们的系统上并作为共享对象库提供。

但是,您处于不同的位置。您正在编写一个供其他开发人员使用的库。因此,您的最终用户实际上并不是真正的最终用户。在这种情况下,提供动态链接到 libcurl 是“更好的”。

如果您静态链接,那么您的库将在其代码中封装 libcurl 库的副本。现在想象一个使用你的库的开发者也在使用其他 10 个库,所有这些库都静态链接到 libcurl。该开发人员基本上将在他/她的最终产品中包含 10 个 libcurl 副本。这不是很有效,因此在开发库时首选针对依赖项的动态链接。

然而...

如果开发人员正在使用 10 个需要 libcurl 的不同库,但其中一些库需要特定的旧/新版本,那么静态链接将很有用。

希望有帮助...

于 2009-05-13T07:42:11.437 回答
2

许多库可以静态动态链接使用。Curl 就是其中之一(参见例如此消息,我会说这样做是合理的。QT 相当庞大,因此您应该尽可能动态链接它。但是,即使它也可以静态链接

静态链接和动态链接之间的本质区别在于,静态链接将库包含在应用程序的目标代码中,而动态链接则应用程序从安装它的系统按需访问库。

于 2009-05-13T07:33:09.597 回答
0

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

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

我有简单的需求。所以我改写了应用程序来调用 curl 使用 system() 代替。这适用于每个版本的 Linux。

于 2009-06-25T02:46:00.463 回答