Linux 但我不知道';t*希望*gcc遵循符号链接

Linux 但我不知道';t*希望*gcc遵循符号链接,linux,gcc,symlink,Linux,Gcc,Symlink,背景: 我编写了一个程序,将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 3月31日6日15:13/usr/lib6

背景:

我编写了一个程序,将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 3月31日6日15:13/usr/lib64/libopenblas.so->libopenblas_巴塞罗那-r0.2.6.so* 另一方面,结果是

lrwxrwxrwx 1 root root 33 Mar 4 09:43 /usr/lib64/libopenblas.so -> libopenblas_sandybridge-r0.2.6.so* lrwxrwx 1根根根3月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根据符号链接而不是该符号链接的结果进行链接,这样无论运行该符号链接的机器的体系结构如何,它都是“正确的”?

如何根据符号链接进行链接<代码>:)向您的发行版投诉,这些不同的库应该有SONAME libopenblas。那么?您的库需要很长时间来编译,以至于您无法为每个体系结构重新编译它吗?这将是最理想的解决方案。sigmavirus24-我正在通过Sun Grid Engine提交一个作业,以便在集群上运行,我不知道它将在哪个体系结构上运行。我有一个R脚本调用我的编译脚本。所以,我需要提前知道它运行在哪个体系结构上。下面是我正在研究的问题:1)为每个拱门编译,然后检测拱门并调用正确的。因此在R中2)在运行时编译(例如,bash脚本运行GCC,然后运行R脚本)3)尝试不同的C BLAS库不完全是,Ryan。我已经看过了这个链接,但解决方案是“当你构建共享库的时候……”我不想构建任何库,只想使用它们。