gpt4 book ai didi

python - 将 GSL(或其他库)静态链接到共享库

转载 作者:太空狗 更新时间:2023-10-29 15:39:40 40 4
gpt4 key购买 nike

注意:尽管在下文中提到了 Python,但我的问题很可能根本与 Python 无关。如果我没记错的话,我提到的“模块”相当于一个 C 库——至少对于我的问题而言是这样。

在 Debian 上,我试图用 C 创建一个 Python 模块,而 C 又使用 GSL。以下 Makefile 成功编译它:

CC = gcc -Wall -fPIC -O3
NAME = meinzeug

matrizenwuerfler: $(SRC)
$(CC) -o $(NAME).o -I/usr/lib/python2.5/site-packages/numpy/core/include -I/usr/include/python2.5 -c $(NAME).c
$(CC) -shared -o $(NAME).so -lgsl -lgslcblas -lm $(NAME).o

因为这个模块应该被我以外的 (Linux) 机器使用,所以我希望 GSL 包含在模块中(或随模块一起提供)。

但是,如果我将 -static 作为选项添加到 Makefile 的最后一行,我会收到以下错误:

gcc -Wall -fPIC -O3 -shared -static -o meinzeug.so -lgsl -lgslcblas -lm meinzeug.o
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.3.2/crtbeginT.o: relocation R_X86_64_32 against `__DTOR_END__' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.3.2/crtbeginT.o: could not read symbols: Bad value
collect2: ld returned 1 exit status

在库链接之前添加 -Wl,-Bstatic 会导致不同的错误:

gcc -Wall -fPIC -O3 -shared -o meinzeug.so -Wl,-Bstatic -lgsl -lgslcblas -lm meinzeug.o
/usr/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status

其他无效的东西:使用 fPIC、-static-libgcc 重新编译 GSL,排列选项。我还没有尝试的是用 fPIC 或类似工具编译 gcc。

最佳答案

尝试

gcc -Wall -fPIC -O3 -shared -o meinzeug.so /usr/lib/libgsl.a -lm meinzeug.

你做不到

gcc -Wall -fPIC -O3 -shared -static ...   # shared and static at the same time ?

因此您将提供 GSL 的静态库以及您的代码。

在一天结束时,我会下注并保持对 GSL 的依赖。几乎每个人都拥有它,而且 API 非常稳定。

关于python - 将 GSL(或其他库)静态链接到共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3181154/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com