linux系统环境变量问题记录

linux系统环境变量问题记录

遇到的问题

(1)在链接cuda代码时

g++ -o prog main.o  -lcudart

报错:usr/bin/ld :找不到-lcudart

(2)其实这个问题就是链接时编译器找不到libcudart.so这个动态库

(3)改成

g++ -o prog main.o  -lcudart -L/usr/local/cuda/lib64

就行了

但是我记得我在环境变量里面设置了/usr/local/cuda/lib64这个路径,按道理不需要再告诉编译器,它自己会去里面找

sudo vim ~./bashrc
export PATH="/usr/local/cuda-12.2/bin:$PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64/"
export CUDA_HOME=/usr/local/cuda
source ~./bashrc
sudo ldconfig

因此我现在就要解决怎么 g++ -o prog main.o -lcudart 就可以链接

解决

查了很多资料,才发现我存在一个误区

我以为的 export LD_LIBRARY_PATH=“$LD_LIBRARY_PATH:/usr/local/cuda/lib64/” 会告诉编译器在链接时去在这里面找

(1)LD_LIBRARY_PATH环境变量在链接阶段不发挥作用,其实LD_LIBRARY_PATH环境变量是程序运行时发挥作用,比如程序运行时需要动态库时,会去里面找(动态链接时,动态链接库不会复制到程序里面,程序运行时,需要这个库了才会加载)

(2)LIBRARY_PATH环境变量在链接阶段发挥作用

因此我只需要增加下面的环境变量就解决了这个问题

sudo vim ~./bashrc
export LIBRARY_PATH=/usr/local/cuda/lib64:$LIBRARY_PATH

source ~./bashrc
sudo ldconfig

总结

LIBRARY_PATH环境变量在链接阶段发挥作用

LD_LIBRARY_PATH环境变量在程序运行时发挥作用

你可能感兴趣的:(linux,运维,服务器)