gpt4 book ai didi

c - 静态链接到 LAPACK

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

我正在尝试发布一些软件,目前正在使用构建过程的脚本。我坚持做一些我从未想过会做的事,在 x86_64 linux 上静态链接 LAPACK。在配置过程中,AC_SEARCH_LIB([main],[lapack]) 有效,但编译 lapack 单元不起作用,例如 undefiend reference to 'dsyev_' --no lapack/blas 例程被忽视了。

我已经确认我已经安装了这些库,甚至使用适当的选项自己编译了它们,使它们成为静态的并具有相同的结果。

这是我几年前第一次使用 LAPACK 时使用的示例,它是动态工作的,但不是静态的:http://pastebin.com/cMm3wcwF

我用来编译的两种方法如下,

gcc -llapack -o eigen eigen.c
gcc -static -llapack -o eigen eigen.c

最佳答案

您的链接顺序错误。在需要它们的代码之后而不是之前链接库。像这样:

gcc -o eigen eigen.c -llapack 
gcc -static -o eigen eigen.c -llapack

这应该可以解决链接问题。


为了回答后续的问题,为什么这有效,GNU ld 文档是这样说的:

It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, foo.o -lz bar.o' searches libraryz' after file foo.o but before bar.o. If bar.o refers to functions in `z', those functions may not be loaded.

........

Normally the files found this way are library files—archive files whose members are object files. The linker handles an archive file by scanning through it for members which define symbols that have so far been referenced but not defined. But if the file that is found is an ordinary object file, it is linked in the usual fashion.

即。链接器将通过一个文件寻找未解析的符号,并按照您提供的顺序跟踪文件(即“从左到右”)。如果您在读取文件时尚未指定依赖关系,则链接器将无法满足该依赖关系。链接列表中的每个对象只解析一次。

另请注意,如果在链接共享库或目标文件时检测到循环依赖性,GNU ld 可以进行重新排序。但是静态库只对未知符号进行一次解析。

关于c - 静态链接到 LAPACK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7177885/

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