创建一个完全静态的Libcurl库

时间:2017-07-30 21:19:05

标签: c++ static-libraries libcurl

首先,我将解释一下大局:

我正在创建一个应用程序,我将不同库中的大多数功能分开。其中一个包含一些使用curl的类。我实际上使用Ubuntu 64位来开发和测试它,但我的生产环境是带有ARM处理器的NAS。我打算以后再用它来制作Windows。

我现在的位置:

我的应用程序在linux和基于ARM的NAS上运行。但是,我没有与curl链接,我在内部使用curl来执行我需要的操作。这有一些缺点:

  • 作为一名程序员,我认为这是一种丑陋的做法。我应该链接到libcurl,这是使用其他软件组件功能的正常和干净的方式。
  • 这意味着curl可执行文件安装在目标上。不仅我不想依赖于此,而且在NAS系统升级之后,我发现我不能再依赖它。

我想要什么

正如我打算使用curl作为一个库,我首先尝试用"软方式" :动态链接。虽然它适用于我的开发环境,但它并不适用于生产环境,因为我发现那里安装的curl库并没有按预期工作。

所以我的下一次尝试是使用libcurl作为静态库。我也认为这是对我来说最好的面向未来的选择,因为它可以确保无论是在NAS还是在任何其他系统上,我将使用的库总是相同的。

到目前为止我遇到的问题

  • 在另一个静态库中包含静态库

StackOverflow中的其他答案已经详细记录了这一点:How to merge two "ar" static libraries into one

我这样做是为了创建一个我自己的库和libcurl的组合库,并且据我检查过,它有效。

  • 从源
  • 静态构建libcurl

还有其他答案涵盖了这个主题,我设法创建了一个只有 libcurl功能的libcurl.a。

我仍在努力解决的问题

  • 静态构建libcurl 及其所有依赖项

有一些相关信息,例如here。我做了所建议的,使用--disable-shared和--enable-static调用configure脚本。我也做过" rm src / curl"在使用LDFLAGS = -all-static之前make和调用make,但是生成的libcurl仍然错过了它的依赖项(openssl,pthreads,zlib ...)。 如果我能解决这个问题,它会回答我的问题。但是没有成功地做到这一点,我尝试了另一种方法:

  • 在最终的lib中手动合并所有libcurl依赖项

正如我用libcurl将我的库合并到一个新库中一样,我也尝试添加curl依赖项:zlib和openssl。所以我从源代码编译来创建静态库并将它们包含在合并中。我无法完全检查结果,因为似乎缺少另一个:pthread。我无法找到pthread进行下载 - 编译 - 静态链接。

从整体上看,我的主要问题是:如何在我的最终应用程序中包含curl,以便它没有外部依赖?

我认为,如果我的两个问题中的任何一个都能解决,我会解决我的主要问题。但如果情况并非如此,我也很高兴听到有人知道更好的解决方法,或者理想情况下已经解决了类似的问题。

0 个答案:

没有答案