在Rcpp包中通过Makevars.win链接Gurobi C++接口的配置问题
Rcpp包Windows环境下链接Gurobi C++接口配置方案
核心错误原因
你遇到的报错本质是Makevars.win的链接参数语法错误,以及链接目标文件选择有误,具体修正方案如下:
正确Makevars.win配置
首先确认你已经在系统环境变量中配置了GUROBI_HOME,指向Gurobi的安装根目录(可在R控制台运行Sys.getenv("GUROBI_HOME")验证返回路径是否正确,如C:/gurobi910/win64)。
写法1:直接指定完整库路径(兼容性最高,不会出现找不到文件的问题)
PKG_LIBS += "$(GUROBI_HOME)/lib/gurobi91.lib" "$(GUROBI_HOME)/lib/gurobi_c++mt2019.lib"
注意:
gurobi_c++mt2019.lib的后缀要和你实际lib目录下的文件名完全匹配,如果你用的是VS2015对应版本就改为gurobi_c++mt2015.lib,带md后缀的是动态运行时版本,带mt的是静态运行时版本,选和你编译工具链匹配的即可。
写法2:用标准-L/-l参数写法
PKG_LIBS += -L"$(GUROBI_HOME)/lib" -lgurobi91 -lgurobi_c++mt2019
注意:
-L后紧跟路径不要加多余空格,-l是小写字母L,后面直接跟库名(去掉.lib后缀),中间不要加空格。
之前配置的错误点说明
- 最初的配置
PKG_LIBS += -L"$(GUROBI_HOME)/bin${R_ARCH}"-gurobi91.dll语法完全错误:-L指定的路径后没有分隔符,且编译链接阶段不需要用到bin目录下的dll文件,dll仅在运行时加载使用,链接阶段只用lib目录下的.lib文件。 - 后续修改的配置
- gurobi91.lib多了多余的空格和单独的减号,编译器会把gurobi91.lib当成独立输入文件,无法在工作目录找到就会报不存在的错误。
额外注意事项
- DESCRIPTION文件不需要额外配置,
LinkingTo仅负责头文件引入,你已经完成该步骤的话无需修改。 - 如果你用mingw编译工具链(R for Windows默认的编译工具)链接Gurobi的MSVC编译的
.lib出现运行时兼容问题,可以重新用mingw编译Gurobi的C++接口源码(源码在Gurobi安装目录的src/build文件夹下),生成对应libgurobi_c++.a静态库后再链接即可。
内容的提问来源于stack exchange,提问作者Vadoj
相关产品推荐
相关产品推荐

