2016-12-28 32 views
0

我已经下载了Windows(.a文件)的编译卷曲并将其链接到我的项目。问题是,编译后的.exe文件是非常大的(2,41MB)只是为了这个简单的程序:当卷曲链接时EXE非常大

#include <stdio.h> 
#include <curl/curl.h> 

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { 
    size_t written = fwrite(ptr, size, nmemb, stream); 
    return written; 
} 
int main(void) 
{ 
    CURL *curl; 
    FILE *fp; 
    CURLcode res; 
    char *url = "https://website/app.exe"; 
    char outfilename[FILENAME_MAX] = "file.exe"; 
    curl = curl_easy_init(); 
    if (curl) { 
     fp = fopen(outfilename,"wb"); 
     curl_easy_setopt(curl, CURLOPT_URL, url); 
     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); 
     curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); 
     curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); 
     curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); 
     res = curl_easy_perform(curl); 
     curl_easy_cleanup(curl); 
     fclose(fp); 
    } 
    return 0; 
} 

现在,我认为是因为卷曲我已经连接到我的项目,这本身并启用了许多功能/包含我不需要的许多功能。有没有什么办法可以只启用HTTPS(以及通过它的HTTP),并使程序规模更小?我在curl网站上找到类似的东西(https://curl.haxx.se/docs/install.html - 在Windows版本中禁用特定协议),但我不太明白我应该怎么做。我试着在代码块中的“定义”中放入“HTTP_ONLY”,但它什么也没做。可能卷曲必须以某种方式用该选项进行编辑。我能做什么? 任何帮助表示赞赏,谢谢!

+1

你试图动态链接到一个DLL而不是静态链接整个二进制? – bruceg

+0

它必须静态链接。 – MrWhite

+0

在这种情况下,你必须自己重新编译curl。当你做一个静态链接时,链接器将引入整个静态库并将其绑定到可执行文件中。 – bruceg

回答

0
  1. 编译应用程序在发布模式,并打开所有条,编制发布模式的应用程序将它的大小因减少去除调试符号
  2. 您必须编译的libcurl自己并对其进行配置的。配置一个库可能有点棘手,但值得一提的是,你可以完全自定义它,所以禁用未使用的特性可以减少库的大小,也不会记住在没有调试信息的情况下编译curl。
  3. 编译具有不同优化标志的所有员工,说-Os是可取的,但你应该检查其他优化级别来验证。
  4. 尽可能使用共享库
+0

我编译它在发布模式。如何在编译curl时仅配置使用HTTP/S功能? – MrWhite

+0

[根据记录?](https://github.com/curl/curl/blob/master/docs/INSTALL.md#disabling-specific-protocols-in-windows-builds) –