背景:
我写了一个程序,它将OpenBLAS库用于非常异构的计算集群。 OpenBLAS对不同的体系结构使用不同的库。
所以在一台机器上'ls -l /usr/lib64/libopenblas.so'导致
lrwxrwxrwx 1 root root 31 Mar 6 15:13 /usr/lib64/libopenblas.so -> libopenblas_barcelona-r0.2.6.so*
另一方面,结果是
lrwxrwxrwx 1 root root 33 Mar 4 09:43 /usr/lib64/libopenblas.so -> libopenblas_sandybridge-r0.2.6.so*
可能还有其他人,但这些是我检查的两个。两者都实现相同的API,只需使用不同的优化。
问题:
当我使用这些编译我自己的共享对象文件时,我使用
gcc ... -lopenblas
它编译得很好,它运行在具有类似架构的机器上(即那些带有'libopenblas_barcelona-r0.2.6.so'的机器),但在其他架构上它无法运行。
ldd显示它链接到libopenblas_barcelona-r0.2.6.so而不是libopenblas.so。
有什么方法可以告诉gcc链接符号链接,而不是那个符号链接的结果,这样无论它运行的机器的架构如何,它都是“正确的”?