我正在尝试安装并运行该程序迪思特。为此,我必须在本地安装较新版本的 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: version
GLIBCXX_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重建后给出了同样的错误。
我的问题是:
如何构建一个程序,以便在运行时动态链接器将在正确的目录中查找库?
export LD_LIBRARY_PATH=/scratch/wdavis/Tools/local/lib64/
如果我运行,设置要运行的 Dsuite,然后继续运行其他程序而不重置 LD_LIBRARY_PATH,会发生什么情况?如何重置 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 ld
man ld.so
man bash
你做unset VAR_NAME