一次性解决C++调用cplex时的所有设置问题

分类: 系统实验 |
一次性解决C++调用cplex时的所有设置问题
在C++中调用cplex时,会遇到了一系列问题,我现在从新建项目开始,到成功输出一个优化问题的结果,把这个过程中遇到的问题及解决方法写出来分享给大家。
1. 在Visual Studio中新建C++项目。
文件——新建——Visual C++ ——Win32控制台应用程序——名称取test_1,路径选择为“C:\Users\Xiexk\Desktop\on work\test\”——选择空项目——完成。
2.
找到cplex的安装目录,里面有针对C的标准的cplex的例子(注意最好不要随便在网上找一个,会有bug的),任选一个(lpex1.c)"D:\cplex\cplex\examples\src\c\lpex1.c",添加到test_1的源文件中。
3. 在Visual Studio中调用cplex的操作设置。
(1) 在Visual Studio中设置头文件路径。
项目——test_1属性——配置属性——C/C++——常规——附加包含目录——编辑,然后添加头文件。(注意首先找到cplex安装路径)
D:\cplex\cplex\include;
D:\cplex\concert\include;
http://s16/mw690/0047A2O8zy76ZQVEg5p9f&690
这一步会告诉VS有关Cplex(求解的核心算法)和Concert(建模时要用的类)的头文件在什么地方。一次设置,对所有项目有效。
(2) 项目——test_1属性——配置属性——链接器——常规——附加库目录——编辑,添加下面两个文件。
D:\cplex\cplex\lib\x64_windows_vs2012\stat_mda;
D:\cplex\concert\lib\x64_windows_vs2012\stat_mda
http://s11/mw690/0047A2O8zy76ZQX2BOa1a&690
(3) 在Visual Studio中设置库文件
项目——test_1属性——配置属性——链接器——输入——附加依赖项,添加库文件
D:\cplex\cplex\lib\x64_windows_vs2012\stat_mda\cplex1251.lib
D:\cplex\cplex\lib\x64_windows_vs2012\stat_mda\ilocplex.lib
D:\cplex\concert\lib\x64_windows_vs2012\stat_mda\concert.lib
http://s1/mw690/0047A2O8zy76ZRdxf6820&690
(4) 把步骤(3)中的三个文件拷贝到项目的目录下"C:\Users\Xiexk\Desktop\on work\test\test_1\Release"
注:release文件夹需要先运行一下程序才出现,且此处必须将debug改为release,因为我们是生成一个可用的exe文件,然后再调用cplex来求解。
http://s7/mw690/0047A2O8zy76ZRdzopgd6&690
(5) 其他配置
a. 项目——test_1属性——配置属性——C/C++——预处理器——预处理器定义——编辑,加上“IL_STD”
http://s8/mw690/0047A2O8zy76ZRdBw3Rb7&690
这一步是使用C++标准模板库STL必须的。
b.项目——test_1属性——配置属性——C/C++——代码生成——运行库
注:用多线程(/MT)和多线程DLL(/MD)均可。
http://s16/mw690/0047A2O8zy76ZRdXwOH5f&690
4. 经过上述步骤,Visual Studio已经可以成功调用cplex了,但如果你电脑是64位,cplex也是64位的,运行lpex1还会报错“module machine type ‘x64’ conflicts with target machine type ‘x86’”,这是因为在64位系统中写win32 console application程序,编译时候出现冲突,解决办法如下。
(1) 项目——test_1属性——配置属性——链接器——高级——目标计算机——MachineX64 (/MACHINE:X64)
http://s7/mw690/0047A2O8zy76ZRe06Tcf6&690
(2) 在release(debug)选项框右侧,在配置管理中,将该项目解决方案平台设置为“x64”。注意,此处必须将debug改为release,因为我们是生成一个可用的exe文件,然后再调用cplex来求解。
http://s14/mw690/0047A2O8zy76ZRe2uuh3d&690
5. 此时,运行程序仍会报错“win(32):已加载”C:\windows\System32\ntdll.dll”。无法查找或打开PDB文件”,解决方法如下。
(1) 工具——选项——调试——常规——启用源服务器支持
http://s7/mw690/0047A2O8zy76ZRe4Hhc36&690
(2) 工具——选项——调试——符号——Microsoft符号服务器
http://s11/mw690/0047A2O8zy76ZRe71hg7a&690
6. 经过上述所有步骤,程序终于成功运行,并生成exe程序。
http://s9/mw690/0047A2O8zy76ZRe8Zega8&690
7.找出exe文件,在命令窗口执行。
在命令窗口执行test_1.exe –r (或-c -n)指令。
参考以下三个博文:
http://blog.sina.com.cn/s/blog_50c154510100g81w.html
http://blog.sina.com.cn/s/blog_5ff46b2f0102v583.html
http://www.itdadao.com/articles/c15a24150p0.html