背景:
我编写了一个程序,将 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 链接到符号链接,而不是该符号链接的结果,这样无论它运行的机器的体系结构如何,它都是“正确的”?