Gcc ATLAS中未定义的参考文献

Gcc ATLAS中未定义的参考文献,gcc,linker,atlas,Gcc,Linker,Atlas,我试图在我的项目中使用ATLAS,但我无法将最简单的代码与之链接: #include <stdio.h> #include <cblas.h> void ATL_buildinfo(void); int main() { ATL_buildinfo(); return 0; } 我仔细检查了ATL_buildinfo原型和libatlas.a,nm显示ATL_buildinfo存在 可能是什么问题?在链接器标志之前移动main.c可能会解决问题 $g

我试图在我的项目中使用ATLAS,但我无法将最简单的代码与之链接:

#include <stdio.h>
#include <cblas.h>

void ATL_buildinfo(void);

int main() {
    ATL_buildinfo();
    return 0;
}
我仔细检查了ATL_buildinfo原型和libatlas.a,nm显示ATL_buildinfo存在


可能是什么问题?

在链接器标志之前移动main.c可能会解决问题

$gcc main.c -I..-L...".  
这应该可以解决问题

这是因为“链接顺序”是由gnu链接器强加的

链接器的传统行为是在命令行上指定的库中从左到右搜索外部函数。这意味着包含函数定义的库应该出现在使用它的任何源文件或目标文件之后。这包括使用shortcut-l选项指定的库,如以下命令所示

$ gcc -Wall calc.c -lm -o calc   (correct order)
此链接解释了这种行为:


当您尝试使用
gcc…
行时,您会遇到什么错误?请移动main.c,如“$gcc main.c-I..-L..”。这应该可以。它似乎是一个静态库。如果您直接在cli中提供该库,则可以避免所有麻烦。比如$gcc main.c-I$dir/libatlas。a@aftnix-接得好。如果你能够重现这个问题,然后用这个来修复它——这应该是一个答案。另请查看
-static
。至于另一位,即在参数列表前面移动
main.c
,我认为这不起作用。如果main引用库,则相应的
-l
需要出现在列表中
main.c
之前。
$ gcc -Wall calc.c -lm -o calc   (correct order)