gpt4 book ai didi

c - 静态链接到LAPACK

转载 作者:行者123 更新时间:2023-12-02 10:59:52 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/45535632/

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