Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将动态链接转换为静态链接_C_Linux_Static Linking_Dynamic Linking_Libevent - Fatal编程技术网

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

C 如何将动态链接转换为静态链接,c,linux,static-linking,dynamic-linking,libevent,C,Linux,Static Linking,Dynamic Linking,Libevent,我有一个使用libevent库的程序 编译程序时,编译命令如下: gcc -o myprogram mysource.c mysource.h -levent 所以它是动态链接 现在我想在没有libevent的计算机上运行这个程序, 我需要静态链接以便我的程序可以在那台计算机上运行, 有什么简单的步骤吗 我尝试了-static,但出现以下错误: [root@kitty relay]# gcc -o relay -static mysource.c mysource.h -leve

我有一个使用libevent库的程序

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

 gcc -o myprogram mysource.c mysource.h -levent 
所以它是动态链接

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

我尝试了
-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
为什么?

来自:

-静态

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


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

或者尝试
gcc-omyprogram-staticmysource.c-levent


(而且您可能不应该将
mysource.h
指定给gcc,因为它很可能包含在mysource.c中
#包含“mysource.h”

如果我有多个共享库,比如-lpcap,-levent,并且我只想静态链接libevent,但动态链接libpcap,这可能吗?谢谢然后不要指定
-static
选项,而是将
libevent.a
传递给链接器(就像在第一个命令中一样),并添加
-lpcap
。我尝试了
gcc-o relay-static mysource.cmource.h/usr/local/lib/libevent.a-lpcap
,但是我遇到了一些错误:比如
/home/wgong/Downloads/package/libevent-1.4.14b-stable/event.c:150:clock\u gettime的未定义引用
。为什么?谢谢,
-lrt
,你能解释一下
-lrt
?谢谢它告诉链接器使用
librt
库。我猜libevent.so动态链接到librt.so(它的函数使用librt中的函数),当我们动态链接libevent时,它由加载程序处理。但是当我们静态链接libevent时,我们需要在链接时解析来自libevent的所有调用。