【发布时间】:2011-11-08 21:07:38
【问题描述】:
GMP 文档说静态链接可能会提供小的性能改进。
我无法让它在我的 Linux 系统上静态链接 libgmp。我已将我遇到的问题缩小到一个小测试用例。
gmptest.c
#include <gmp.h>
int main(int argc, char** argv) {
mpz_t foo;
mpz_init(foo);
return 0;
}
生成文件:
all: clean gmptest static
clean:
rm -f *.s
rm -f *.o
rm -f gmptest
rm -f static-gmptest
gmptest: Makefile gmptest.c
gcc -std=c99 -O3 -lgmp gmptest.c -o gmptest
static: clean Makefile gmptest.c
gcc -std=c99 -O3 -static /usr/lib/libgmp.a gmptest.c -o static-gmptest
编译和链接非静态二进制文件没有任何问题,但“Make static”会产生:
gcc -std=c99 -O3 -static /usr/lib/libgmp.a gmptest.c -o static-gmptest
/tmp/ccWSFke9.o: In function `main':
gmptest.c:(.text+0x8): undefined reference to `__gmpz_init'
collect2: ld returned 1 exit status
make: *** [static] Error 1
图书馆确实存在:
chris@vostro:~/Dropbox/static$ ls -lA /usr/lib/libgmp.a
-rw-r--r-- 1 root root 1041666 2010-02-26 13:20 /usr/lib/libgmp.a
我也尝试过 -lgmp 进行静态链接,但错误是一样的。
这一切都在 Ubuntu 10.04 和 10.10 AMD64 上。
有人可以告诉我我正在犯的明显错误吗?
谢谢,
克里斯。
【问题讨论】:
-
您是否尝试过重新排序,以便在命令行中 users-of-library 之后需要库?
标签: c static-linking gmp