C 如何将动态链接转换为静态链接
我有一个使用libevent库的程序 编译程序时,编译命令如下: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
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的所有调用。