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环境变量在程序运行时发挥作用