使用VS2017编译QuantLib后,编译QuantLib-SWIG for Python遇LNK1104错误
你遇到的核心问题其实是工具集版本不匹配——你用VS2017编译的QuantLib,生成的库文件名不可能是QuantLib-vc90-x64-mt.lib,因为vc90对应的是Visual Studio 2008,而VS2017对应的工具集标识是vc141。QuantLib-SWIG的默认配置在找旧版本的库文件,自然会报错。
给你几个针对性的解决步骤:
第一步:确认实际生成的QuantLib库文件名
去你编译QuantLib的输出目录(比如VS项目的x64\Release文件夹,或者QuantLib源码的lib目录),找到生成的.lib文件,它的名字应该是类似QuantLib-vc141-x64-mt.lib这样的,把这个正确的文件名记下来。第二步:修改QuantLib-SWIG的Python配置文件
打开C:\QuantLib-SWIG-1.12\Python目录下的setup.py文件,找到指定库文件名的代码段,把原来的QuantLib-vc90-x64-mt.lib替换成你刚才找到的正确文件名。
同时还要检查setup.py里的library_dirs参数,确保它指向你QuantLib库文件所在的实际目录,比如:library_dirs = ['C:\\你的QuantLib编译路径\\x64\\Release']第三步:修正环境变量并重新编译
虽然你已经把C:\QuantLib-SWIG-1.12加到了路径,但更关键的是要把QuantLib库文件所在目录加到LIB环境变量里。在命令提示符里先执行:set LIB=C:\\你的QuantLib库文件目录;%LIB%之后再运行编译命令,比如
python setup.py build或者python setup.py install。额外检查:确保架构一致
确认你编译QuantLib时用的是x64架构,同时编译QuantLib-SWIG也要对应x64版本的Python环境(如果你的Python是32位,那QuantLib也得编译成32位),架构不匹配也会导致找不到库的问题。
补充一句:Luigi和KingJohnno提到的确认库文件存在是正确的思路,但这里的问题不是文件不存在,而是配置里找的库名和你实际生成的版本不匹配,所以重点是修正配置里的库名和路径。
内容的提问来源于stack exchange,提问作者gencho

