在 Linux 上静态链接 libgmp 时出错

2024-03-23

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 上。

有人可以告诉我我犯的明显错误吗?

Thanks,

Chris.


Try

 gcc -std=c99 -O3 -static gmptest.c -lgmp -o static-gmptest

因为库应该始终以良好的顺序链接,并且位于使用它们的程序或目标文件之后。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Linux 上静态链接 libgmp 时出错 的相关文章

随机推荐