首先,我将解释一下大局:
我正在创建一个应用程序,我将不同库中的大多数功能分开。其中一个包含一些使用curl的类。我实际上使用Ubuntu 64位来开发和测试它,但我的生产环境是带有ARM处理器的NAS。我打算以后再用它来制作Windows。
我现在的位置:
我的应用程序在linux和基于ARM的NAS上运行。但是,我没有与curl链接,我在内部使用curl来执行我需要的操作。这有一些缺点:
我想要什么
正如我打算使用curl作为一个库,我首先尝试用"软方式" :动态链接。虽然它适用于我的开发环境,但它并不适用于生产环境,因为我发现那里安装的curl库并没有按预期工作。
所以我的下一次尝试是使用libcurl作为静态库。我也认为这是对我来说最好的面向未来的选择,因为它可以确保无论是在NAS还是在任何其他系统上,我将使用的库总是相同的。
到目前为止我遇到的问题
StackOverflow中的其他答案已经详细记录了这一点:How to merge two "ar" static libraries into one
我这样做是为了创建一个我自己的库和libcurl的组合库,并且据我检查过,它有效。
还有其他答案涵盖了这个主题,我设法创建了一个只有 libcurl功能的libcurl.a。
我仍在努力解决的问题
有一些相关信息,例如here。我做了所建议的,使用--disable-shared和--enable-static调用configure脚本。我也做过" rm src / curl"在使用LDFLAGS = -all-static之前make和调用make,但是生成的libcurl仍然错过了它的依赖项(openssl,pthreads,zlib ...)。 如果我能解决这个问题,它会回答我的问题。但是没有成功地做到这一点,我尝试了另一种方法:
正如我用libcurl将我的库合并到一个新库中一样,我也尝试添加curl依赖项:zlib和openssl。所以我从源代码编译来创建静态库并将它们包含在合并中。我无法完全检查结果,因为似乎缺少另一个:pthread。我无法找到pthread进行下载 - 编译 - 静态链接。
从整体上看,我的主要问题是:如何在我的最终应用程序中包含curl,以便它没有外部依赖?
我认为,如果我的两个问题中的任何一个都能解决,我会解决我的主要问题。但如果情况并非如此,我也很高兴听到有人知道更好的解决方法,或者理想情况下已经解决了类似的问题。