C++ 创建一个完全静态的Libcurl库

C++ 创建一个完全静态的Libcurl库,c++,static-libraries,libcurl,C++,Static Libraries,Libcurl,首先,我将解释全局: 我正在创建一个应用程序,其中我将不同库中的大部分功能分离开来。其中一个包含一些使用curl的类。我实际上使用Ubuntu 64位来开发和测试它,但我的生产环境是一个带有ARM处理器的NAS。我打算稍后也为windows制作 我现在的位置: 我的应用程序运行在linux和基于ARM的NAS上。然而,我没有链接到curl,我在内部使用命令行中的curl来做我需要的事情。这有一些缺点: 作为程序员,我认为这是一个丑陋的做法。我应该链接到libcurl,这是使用其他软件组件特性的

首先,我将解释全局:

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

我现在的位置:

我的应用程序运行在linux和基于ARM的NAS上。然而,我没有链接到curl,我在内部使用命令行中的curl来做我需要的事情。这有一些缺点:

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

由于我打算将curl用作一个库,所以我首先尝试使用“软方法”:动态链接。虽然它在我的开发环境中起作用,但在生产环境中却不起作用,因为我发现安装在那里的curl库没有按预期工作

所以我的下一次尝试是使用libcurl作为静态库。我还认为它是我未来最好的选择,因为它可以确保在NAS或任何其他系统上,我将使用的库始终是相同的

到目前为止我已经解决的问题

  • 在另一个静态库中包含一个静态库
这已经在StackOverflow中的其他答案中得到了很好的证明:

我这样做是为了创建一个由我自己的one和libcurl组成的组合库,据我所知,它是有效的

  • 从源代码静态构建libcurl
还有其他一些答案涉及到这个主题,我设法创建了一个libcurl.a,它只有libcurl特性

我仍在努力解决的问题

  • 静态构建libcurl及其所有依赖项
例如,有一些关于这方面的信息。我按照建议做了,用--disable shared和--enable static调用配置脚本。在make之前,我还做了“rmsrc/curl”,并使用LDFLAGS=-all static调用make,但是生成的libcurl仍然缺少其依赖项(openssl、pthreads、zlib…)。 如果我能解决这个问题,它会回答我的问题。但没有成功地做到这一点,我尝试了另一种方法:

  • 在最终库中手动合并所有libcurl依赖项
正如我将我的库与libcurl合并到一个新库中时所做的那样,我还尝试向其中添加curl依赖项:zlib和openssl。因此,我从源代码处编译了这两个库以创建静态库,并将它们包含在合并中。我无法完全检查结果,因为似乎缺少另一个:pthread。我无法找到用于下载-编译-静态链接的pthread

综观全局,我的主要问题是:如何在最终的应用程序中包含curl,从而使它没有外部依赖性


我想,如果我剩下的两个问题中的任何一个能够得到解决,我就会解决我的主要问题。但如果不是这样,我也很高兴听到有人知道解决这个问题的更好方法,或者最好已经解决了类似的问题。

我为libcurl的整个配置/制作过程创建了一个小shell脚本。如果代码有帮助/有人要求,我可以在这里发布代码。