在CLion中使用MKL(C++)

  • MKL 安装
https://software.intel.com/en-us/mkl/choose-download/linux
需要注册才可以下载
tar -zxvf l_mkl_2019.0.117.tgz -C ../IntelMathKernel/
../IntelMathKernel/l_mkl_2019.0.117/install.sh
安装路径可以自己设置
  • CLion配置

说白了就是配置cmake

cmake_minimum_required(VERSION 3.12)
project(TestMKL)

set(CMAKE_CXX_STANDARD 14)

include_directories(/home/mpath/intel/mkl/include/)
link_directories(/home/mpath/intel/mkl/lib/intel64 /home/mpath/intel/lib/intel64)

add_executable(TestMKL main.cpp)
target_link_libraries(TestMKL mkl_intel_thread iomp5 mkl_core mkl_intel_lp64 pthread)
  • 样例代码
    ∂T∂t=−V∂T∂xT∣t=0={ 0x>0.51x≤0.5T∣x=0=1 \begin{aligned} \frac { \partial T}{\partial t} = -V \frac {\partial T}{\partial x} \end{aligned} \\ T|_{t=0} = \begin{cases} 0 & x > 0.5 \\ 1 & x \le 0.5 \end{cases} \\ T|_{x=0}=1 t
<think>我们面临的核心矛盾:CLion生成的是现代32/64位可执行文件,而DOSBox的Debug仅支持16位程序。因此直接调试不可行。以下是两种替代方案:---###方案一:生成16位兼容程序(理论可行但复杂)1.**使用16位编译器**在CLion中配置交叉编译工具链,生成DOS兼容的16位程序:-安装OpenWatcomC++编译器(支持生成16位DOS程序)-在CLion中配置CMake:```cmakecmake_minimum_required(VERSION3.20)project(DOS_ProgramCXX)set(CMAKE_CXX_COMPILER"wcl.exe")set(CMAKE_CXX_FLAGS"-bcl=dos-ml-D__DOS__")add_executable(testmain.cpp)```-**注意**:需要修改代码以使用DOS兼容(如`<conio.h>`替代现代)2.**生成调试信息**在编译时添加调试符号生成:```cmakeset(CMAKE_CXX_FLAGS_DEBUG"-d2")#Watcom的调试符号选项```3.**在DOSBox中调试**-将生成的`.exe`复制到DOSBox挂载目录-启动Debug:```dosDEBUGTEST.EXE```-使用`u`查看反汇编,通过`g[地址]`和`t`控制执行---###方案二:模拟传统开发环境(推荐)1.**在DOSBox中建立开发环境**-安装TurboC++或WatcomIDE(替代CLion)-直接在DOS环境中编写代码并编译2.**使用集成调试器**TurboC++内置调试器支持:-断点设置(`Ctrl+F8`)-变量监视(`Debug>Watches`)-寄存器查看(`Debug>Register`)---###关键挑战对比|方法|优势|劣势||---------------------|-----------------------|--------------------------||CLion+交叉编译|保留现代开发环境|需大幅修改代码和构建配置||纯DOS环境开发|原生兼容Debug工具|放弃CLion的现代功能|---###调试示例(纯DOS环境)1.在TurboC++中编写代码:```cpp#include<iostream.h>main(){intx=10;cout<<x;//在此行设置断点return0;}```2.按`F7`进入调试模式,程序将在`cout`行暂停3.按`Alt+F4`查看变量值(将显示`x=10`)---###结论由于架构差异,**无法直接用DOSBox的Debug调试CLion生成的现代C++程序**。建议:1.对于学习目的:使用TurboC++在DOSBox内完成全流程[^1][^2]2.对于现代项目:改用GDB/Lldb等现代调试器---###相关问题1.如何在CLion中配置OpenWatcom编译器?2.TurboC++的集成调试器有哪些高级功能?3.如何将现代C++代码降级为DOS兼容版本?4.DOSBox中如何查看内存映射?5.为什么16位程序无法在64位系统直接运行?[^1]:TurboC++提供了完整的DOS开发环境[^2]:通过DOSBox可模拟传统开发工作流</think>### 在DOSBox中使用Debug调试CLion编写的C++程序的步骤 由于DOSBox的Debug工具仅支持**16位DOS程序**,而CLion生成的现代C++程序是**32/64位Windows/Linux程序**,直接调试不可行。以下是两种可行方案: --- ### 方案一:生成16位兼容程序(推荐) #### 1. 配置CLion生成DOS兼容程序 ```cmake # 在CMakeLists.txt中添加 set(CMAKE_CXX_COMPILER "wcl.exe") # 使用Open Watcom编译器 set(CMAKE_CXX_FLAGS "-bdos -bcl=dos -ml -D__DOS__") ``` #### 2. 安装必要工具 1. 下载并安装 [Open Watcom C++](https://openwatcom.org/) 编译器 2. 在DOSBox中配置环境: ```dos mount C: C:\Watcom set PATH=C:\Watcom\BIN;%PATH% ``` #### 3. 编译程序 ```bash # 在DOSBox中执行 wcl -bdos -ml -fe=program.exe program.cpp ``` #### 4. 使用Debug调试 ```dos DEBUG PROGRAM.EXE > u # 反汇编 > g 0100 # 运行到内存地址0100h > t # 单步执行 > d ds:0000 # 查看数据段 ``` --- ### 方案二:间接调试(通过中间文件) #### 1. 生成汇编输出 在CLion中修改编译选项: ```cmake set(CMAKE_CXX_FLAGS "-S -masm=intel") # 生成Intel格式汇编 ``` #### 2. 获取关键文件 1. 编译后得到 `program.asm` 2. 提取以下信息: - 函数入口地址(如 `_main: 0100h`) - 变量内存偏移(如 `[bp-4]`) #### 3. 在DOSBox中重建程序 1. 将汇编代码手动移植到Turbo C++ 2. 编译生成16位可执行文件: ```dos tasm /zi program.asm # 编译汇编 tlink /v program.obj # 链接生成EXE ``` #### 4. 调试关键点 ```dos DEBUG PROGRAM.EXE > b 0100 # 在main函数入口设断点 > g # 运行到断点 > d ss:[bp-4] L2 # 查看栈中变量(4字节) ``` --- ### 关键挑战与解决方案 | **问题** | **解决方案** | |-------------------------|----------------------------------| | 32/64位程序不兼容 | 使用Watcom编译器生成16位代码 | | 现代C++语法不支持 | 禁用STL,改用DOS兼容(如conio)| | 调试符号不匹配 | 通过汇编文件手动定位变量地址 | | 内存模型差异 | 使用`-ml`编译选项(小内存模式) | --- ### 调试示例:查看变量值 假设汇编中变量`x`位于`[bp-4]`: ```dos - d ss:[bp-4] L4 # 查看4字节内存 : 0B2D:FFFC 0A 00 00 00 # 显示值0x0000000A(十进制10) - e ss:[bp-4] 0F 00 00 00 # 修改值为15 ``` --- ### 替代建议 1. **纯DOS开发**:直接在Turbo C++中编写代码(支持集成调试器)[^1] 2. **现代调试器**:对于CLion项目,使用GDB/LLDB更高效 3. **混合调试**: - 在CLion中调试核心逻辑 - 在DOSBox中验证硬件交互部分 --- ### 相关问题 1. 如何配置Open Watcom编译器生成DOS兼容程序? 2. Turbo C++的集成调试器与现代GDB有何区别? 3. 如何将C++ STL代码转换为DOS兼容版本? 4. DOSBox中如何查看CPU寄存器状态? 5. 为什么16位程序的内存地址是分段式的? [^1]: Turbo C++提供了完整的DOS开发环境 [^2]: DOSBox可完美模拟传统开发工作流
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值