- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试发布一些软件,目前正在使用构建过程的脚本。我坚持做一些我从未想过会做的事,在 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 library
z' 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/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!