如何将动态链接转换为静态链接

时间:2013-06-14 15:26:50

标签: c linux static-linking dynamic-linking libevent

我有一个使用libevent库的程序

编译程序时,编译命令如下:

 gcc -o myprogram mysource.c mysource.h -levent 

所以它是动态链接。

现在我想在没有解放的计算机上运行这个程序, 我需要静态链接,以便我的程序可以在该计算机上运行, 有什么简单的步骤吗?

我尝试了-static,但我收到了以下错误:

    [root@kitty relay]# gcc  -o relay -static mysource.c mysource.h -levent -lpcap
    /usr/bin/ld: cannot find -lpcap
    /usr/bin/ld: cannot find -lc
    collect2: ld returned 1 exit status

为什么?

2 个答案:

答案 0 :(得分:1)

来自GCC documentation

  

<强> -static

     

在支持动态链接的系统上,这会阻止与共享库的链接。在其他系统上,此选项无效。

答案 1 :(得分:1)

你应该有libevent.a。然后你就可以gcc -o myprogram mysource.c libevent.a

或尝试gcc -o myprogram -static mysource.c -levent

(你可能不应该将mysource.h指定为gcc,因为它最有可能包含在#include "mysource.h"的mysource.c中。)