当构建/运行程序时,如何告诉动态链接器在哪里找到合适的库?

当构建/运行程序时,如何告诉动态链接器在哪里找到合适的库?

我正在尝试安装并运行该程序迪思特。为此,我必须在本地安装较新版本的 gcc(因为我没有 root/超级用户权限。)我使用以下命令执行此操作。

cd /scratch/wdavis/Tools/source/gcc-4.9.4/

./contrib/download_prerequisites

cd /scratch/wdavis/Tools/gcc/

/scratch/wdavis/Tools/source/gcc-4.9.4/configure --prefix /scratch/wdavis/Tools/local/ --disable-multilib

make bootstrap-lean

make install

一切似乎都很顺利。然后我开始使用 DSuite。

git clone https://github.com/millanek/Dsuite.git

cd Dsuite/

cd utils/

python3 setup.py install --user --prefix=

cd ../

我必须编辑 Makefile 来告诉它在哪里可以找到正确版本的 g++ ( /scratch/wdavis/Tools/local/bin/g++)。然后我就打电话了make。一切似乎都有效。然而,DSuite 给出了以下错误:

Dsuite: /lib64/libstdc++.so.6: versionGLIBCXX_3.4.20' 未找到(Dsuite 要求)`

我找到了两个答案这里这里建议“您可以尝试使用 进行构建-L/usr/local/lib64,并使用 进行运行LD_LIBRARY_PATH=/usr/local/lib64(如果需要)。

export LD_LIBRARY_PATH=/scratch/wdavis/Tools/local/lib64/让我运行 Dsuite。然而,make -L/scratch/wdavis/Tools/local/lib64/没有工作,即Dsuite重建后给出了同样的错误。

我的问题是:

  1. 如何构建一个程序,以便在运行时动态链接器将在正确的目录中查找库?

  2. export LD_LIBRARY_PATH=/scratch/wdavis/Tools/local/lib64/如果我运行,设置要运行的 Dsuite,然后继续运行其他程序而不重置 LD_LIBRARY_PATH,会发生什么情况?

  3. 如何重置 LD_LIBRARY_PATH?

提前致谢。

答案1

make -L/scratch/wdavis/Tools/local/lib64/是错的。

-L是 GCC 和链接器的标志(例如ld),而不是 make。

您应该根据应用程序的语言通过导出 CFLAGS 或 CXXFLAGS 导出此内容。也许可以通过 LDFLAGS 导出它 - 这完全取决于应用程序的构建和链接方式,您可以使用 GCC 或 ld 编译最终的二进制文件/库。

例如

export CFLAGS="-L/scratch/wdavis/Tools/local/lib64/"
export CXXFLAGS="-L/scratch/wdavis/Tools/local/lib64/"
export LDFLAGS="-L/scratch/wdavis/Tools/local/lib64/"
./configure && make

LD_LIBRARY_PATH是 glibc 的一个标志,它的目的是执行应用程序,而不是链接它们。

请仔细阅读文档。都在里面了man gcc,,,man ldman ld.so

  1. man bash

你做unset VAR_NAME

相关内容