/usr/bin/ld: cannot find -lcudart

在Ubuntu20.04上使用CUDA11.4编译程序时遇到链接cudart库失败的问题。通过find命令定位到libcudart.so库文件,然后创建软连接到/usr/lib/目录下,从而解决了编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统:Ubuntu20.04

CUDA:11.4

编译程序时,已经完成100%了但是最后突然报错如下

/usr/include/aarch64-linux-gnu/NvInferRuntime.h:682:25: note: declared here
  682 |     TRT_DEPRECATED void destroy() noexcept
      |                         ^~~~~~~
[100%] Linking CXX executable yolov8-pose
/usr/bin/ld: cannot find -lcudart
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/yolov8-pose.dir/build.make:111: yolov8-pose] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/yolov8-pose.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

看来是无法链接到cudart库,使用find命令在根目录查找该库的位置

cd /
sudo find . -name "libcudart.so"

查找到该库的位置在如下地方:

user@user-desktop:/$ sudo find . -name "libcudart.so"
[sudo] password for leedarson: 
find: ‘./run/user/1000/doc’: Permission denied
find: ‘./run/user/1000/gvfs’: Permission denied
./usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudart.so
user@user-desktop:/$

使用软连接将该库添加在/usr/lib/目录下,命令如下

sudo ln -s /usr/local/cuda-11.4/targets/aarch64-linux/lib/libcudart.so /usr/lib/libcudart.so

随后再重新编译,该问题解决。

<think>好的,我现在需要帮助用户解决在macOS中使用ln命令链接libssl时出现的&ldquo;Permission denied”问题。首先,我应该回想一下常见的权限问题解决方法。用户提到的是使用ln命令时权限被拒绝,这可能是因为目标目录(比如/usr/local/lib)需要管理员权限才能写入。 首先,用户可能需要使用sudo来提升权限。比如,在命令前加上sudo,这样以管理员身份执行。比如sudo ln -s ...。但用户可能已经尝试过这样,或者有其他问题,比如目录的所有权问题。 另外,SIP(System Integrity Protection)在macOS中可能会限制对某些系统目录的修改,即使使用sudo也不行。这时候可能需要暂时禁用SIP,但这是比较危险的操作,应该作为最后的手段,或者建议用户将库安装到用户有权限的目录,比如/usr/local/lib本身应该是可以通过Homebrew管理的,可能用户没有正确安装openssl或者路径错误。 还有可能是目标目录的权限设置不正确,用户可能需要检查/usr/local/lib的权限,确保当前用户有写入权限。可以使用ls -l /usr/local/lib查看权限,如果需要的话,用chmod更改权限,但这也可能需要sudo。 另外,参考用户提供的引用,比如引用[2]和[3]中提到的是创建软链接到/usr/local/lib,而用户可能没有正确指定路径或者库的版本不对。比如,openssl@1.1的路径是否正确?需要确认openssl安装的位置,比如通过brew --prefix openssl@1.1来获取正确路径,然后创建软链接。 还有可能用户之前安装过不同版本的openssl,导致冲突。需要确保使用的是正确的版本,并且路径正确。同时,检查是否已经存在同名的文件或链接,可能需要先删除旧的链接,再重新创建。 此外,引用[5]提到SELinux的问题,但macOS使用的是SIP而不是SELinux,不过类似的安全机制可能阻止操作。如果用户遇到Operation not permitted,可能需要检查SIP状态,并考虑是否被系统限制。 总结可能的解决方案步骤: 1. 使用sudo执行ln命令,确保有足够的权限。 2. 确认目标目录的权限,可能需要用chmod修改。 3. 检查openssl的安装路径是否正确,确保软链接的源路径存在。 4. 如果存在旧的链接,先删除它们。 5. 考虑将库安装到用户目录,避免系统目录的权限问题。 6. 如果所有方法失败,检查SIP是否启用,并考虑暂时禁用(需谨慎)。 需要将这些步骤以清晰的方式呈现给用户,同时结合用户提供的引用中的方法,比如引用[2]和[3]的具体命令,指导用户正确创建软链接。</think>### macOS中解决libssl链接权限问题的步骤 #### 1. 使用`sudo`提升权限 大部分系统目录(如`/usr/local/lib`)需要管理员权限才能修改。在命令前添加`sudo`: ```bash sudo ln -s /实际路径/libssl.dylib /usr/local/lib/libssl.dylib ``` 若提示密码,请输入管理员密码[^1][^2][^3]。 --- #### 2. 验证openssl安装路径 确认openssl的安装路径是否正确。通过Homebrew安装时,可使用: ```bash brew --prefix openssl@1.1 # 输出类似/usr/local/opt/openssl@1.1 ``` 然后使用实际路径创建软链接: ```bash sudo ln -s $(brew --prefix openssl@1.1)/lib/libssl.dylib /usr/local/lib/libssl.dylib ``` 同理处理`libcrypto.dylib`[^3]。 --- #### 3. 修复目标目录权限 检查`/usr/local/lib`的权限: ```bash ls -ld /usr/local/lib ``` 若权限不足(非`rwxr-xr-x`),通过`chmod`调整: ```bash sudo chmod 755 /usr/local/lib ``` --- #### 4. 删除冲突的旧链接 若已存在同名文件或链接,先删除: ```bash sudo rm -f /usr/local/lib/libssl.dylib ``` 再重新执行`ln`命令[^3]。 --- #### 5. 使用用户目录避免权限问题 若无法修改系统目录,可将库链接到用户目录(如`~/lib`),并通过环境变量指定路径: ```bash mkdir -p ~/lib ln -s /实际路径/libssl.dylib ~/lib/libssl.dylib export LIBRARY_PATH=$HOME/lib:$LIBRARY_PATH ``` --- #### 6. 检查系统完整性保护(SIP) 若仍提示`Operation not permitted`,可能是SIP限制。 - 查看SIP状态: ```bash csrutil status ``` - 若启用,需重启进入恢复模式,执行: ```bash csrutil disable ``` 完成后重新启用SIP(**谨慎操作**)[^5]。 --- ### 示例完整命令流程 ```bash # 确认openssl路径 OPENSSL_PATH=$(brew --prefix openssl@1.1) # 删除旧链接 sudo rm -f /usr/local/lib/libssl.dylib /usr/local/lib/libcrypto.dylib # 创建新链接 sudo ln -s $OPENSSL_PATH/lib/libssl.dylib /usr/local/lib/libssl.dylib sudo ln -s $OPENSSL_PATH/lib/libcrypto.dylib /usr/local/lib/libcrypto.dylib ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值