我在Fedora 14计算机上使用他们的指令(http://wiki.swftools.org/index.php/FAQ)成功编译了swftools。我想在另一台Linux机器上使用其中一个工具(pdf2swf)。当我移动它并在另一台机器上运行它时,它会要求一些共享库。是否可以编译swftools(特别是pdf2swf),这样当我在另一台Linux机器上运行它时,它不会要求任何共享库?如果可执行文件本身的大小更大,可以独立运行。
我是Linux新手,所以如果需要高级知识,请指向相应的在线资源。
此致
答案 0 :(得分:2)
它很简单:与-static链接。当然,这意味着您需要安装静态库。链接器(通常通过cc调用)只是在两者都可用时默认使用共享库。
[hahn@box ~]$ cat hello.c
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
[hahn@box ~]$ cc hello.c -o hello
[hahn@box ~]$ file hello
hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, not stripped
[hahn@box ~]$ ldd hello
linux-gate.so.1 => (0x00205000)
libc.so.6 => /lib/libc.so.6 (0x00697000)
/lib/ld-linux.so.2 (0x005b4000)
[hahn@box ~]$ cc hello.c -o hello -static
[hahn@box ~]$ file hello
hello: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, not stripped
[hahn@box ~]$ ldd hello
not a dynamic executable
[hahn@box ~]$ ./hello
Hello, world!
为了使这项工作,我需要安装glibc-static,默认情况下不安装(至少在这个盒子上,这是Fedora14)。某些包允许您在./configure级别选择静态链接,否则您可能需要修改Makefile。
答案 1 :(得分:1)
嗯,你想要的是静态链接库,而不是动态/共享库。
您需要编译应用程序并静态链接它。如果使用gcc,可以将静态开关应用于编译器的调用:
gcc -static <and the whole gcc shebang>
大多数时候你可以编辑makefile(查找CC定义或CC_ARGS之类的东西)并且只包括上面的静态开关。