MCR运行后出现error while loading shared libraries: libmwlaunchermain.so: cannot open shared object file

这是由于MCR安装目录和系统默认的不同,首先找到自己电脑安装MCR的目录

我安装的是MATLAB2017b对应的MCR v93,安装目录是:

/usr/local/MATLAB/MATLAB_Runtime/v93

然后,运行自己的程序run_M_GeneAlgorMain.sh,输入命令:

sudo ./run_M_GeneAlgorMain.sh /usr/local/MATLAB/MATLAB_Runtime/v93

 

备注

如果还有问题,请尝试:

用命令$sudo gedit /etc/bash.bashrc 打开bash.bashrc文件,加入路径export PATH=$PATH:/usr/local/MATLAB/MATLAB_Runtime/v93/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v93/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v93/sys/os/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v93/sys/opengl/lib/glnxa64

然后$sudo gedit /etc/environment 打开environment文件,加入路径:/usr/local/MATLAB/MATLAB_Runtime/v93/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v93/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v93/sys/os/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v93/sys/opengl/lib/glnxa64

重启电脑,再次尝试。

### Keil5 编译时出现 `error C146` 的原因分析 在嵌入式开发中,当使用 Keil5 进行编译时遇到 `error C146 'P2_0' invalid base address` 错误,通常是因为定义的寄存器地址不合法或者未正确映射到实际硬件资源所致。以下是可能的原因以及解决方案: #### 可能原因 1:宏定义或寄存器地址配置错误 如果程序中通过宏定义的方式指定了某个外设的基址,而该地址超出了目标芯片的实际内存范围,则会触发此错误。 ```c #define P2_BASE_ADDR ((volatile uint8_t *)0x4000) // 假设此处地址非法 #define P2_0 (*(P2_BASE_ADDR + 0)) ``` 上述代码片段中的 `P2_BASE_ADDR` 如果指向了一个不存在的有效地址区域,则会导致编译失败[^1]。 #### 解决方法: 确认所使用的单片机型号及其数据手册,找到对应端口(如 P2)的真实物理地址,并更新至正确的值。 --- #### 可能原因 2:链接脚本设置不当 有时即使源文件内的地址看起来正常,但如果项目工程里的 scatter 文件(即 LD 链接描述符)未能正确定义这些特殊功能寄存器所在的段,也可能引发此类问题。 例如,在某些情况下,默认的 `.text`, `.data` 等标准节之外还需要额外声明一段专门用于存放 SFRs(Special Function Registers)的数据区。 #### 解决方法: 编辑项目的 Scatter File (.sct),增加如下类似的条目来分配特定空间给 I/O 寄存器: ```plaintext SFR 0x0000 UNINIT ; 特殊功能寄存器位于这里 { * (+RW) } ``` 注意调整起始位置(`0x0000`)以匹配具体 MCU 架构需求[^3]。 --- #### 可能原因 3:汇编指令调用冲突 部分高级操作比如直接利用 ARM 汇编访问 CP15 控制寄存器等功能单元时如果没有遵循严格的语法规范也容易造成类似报错现象。 下面给出一个简单的例子展示如何安全地执行 MCR/MRC 类型命令而不违反工具链规则: ```assembly void set_cp15_reg(void){ unsigned int reg_val; asm volatile ("MRC p15, 0, %0, c1, c0, 0" : "=r"(reg_val)); /* 对 reg_val 执行必要的修改 */ asm volatile ("MCR p15, 0, %0, c1, c0, 0" :: "r"(reg_val)); } ``` 以上方式可以有效规避潜在的风险点同时保持良好的可移植性和兼容性特性[^2]。 --- ### 总结建议 针对当前状况推荐按照以下顺序排查并修正: 1. 审核所有涉及硬编码绝对地址的部分确保其数值准确性; 2. 查看 linker script 中是否有遗漏关于 sfr section 的说明项; 3. 若存在 inline assembly 则需仔细校验每一条语句是否符合官方文档指导原则; 完成上述步骤后再重新构建整个工程项目应该能够顺利消除原有的 compilation errors.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值