我正在使用BVLC Caffe on the Windows branch,目前不支持 .
当我尝试在Visual Studio 2013上以调试模式编译pycaffe时,我得到了错误
_caffe.obj : error LNK2019: unresolved external symbol __imp__Py_NegativeRefcount referenced in function _import_array
_caffe.obj : error LNK2019: unresolved external symbol __imp__Py_Dealloc referenced in function _import_array
_caffe.obj : error LNK2001: unresolved external symbol __imp__Py_RefTotal
但是,pycaffe在Release模式下编译很好 . 我正在使用Python 2.7.12 :: Anaconda 4.1.1(64位),我在libs目录中添加了python27_d.lib .
这不是另一个问题的重复,因为:
-
符号在释放模式下解析,但不在调试模式下解析 . (https://stackoverflow.com/a/12573818/1637126)
-
符号在发布模式下声明和定义(What is an undefined reference/unresolved external symbol error and how do I fix it?)
-
Python27.lib和Python27_d.lib库存在且位于同一目录中 . (https://stackoverflow.com/a/12574400/1637126)
-
Release和Debug库以相同的顺序链接 . (https://stackoverflow.com/a/24675715/1637126)
-
符号在C中,而且在发布模式下工作,但在调试模式下不工作(https://stackoverflow.com/a/12574420/1637126)
-
重新编译和重新启动不起作用 . (https://stackoverflow.com/a/20358542/1637126)
-
Python库的发布和调试模式虽然命名不同,但实际上是彼此的副本 . 那对一个人有用的东西应该适用于另一个 . (https://stackoverflow.com/a/12574423/1637126)
-
它们不是模板类 . (https://stackoverflow.com/a/26233563/1637126)
1 回答
将pyconfig.h从python目录复制到pycaffe源代码所在的位置 .
找到以下行:
并编辑它,使它看起来像这样:
基本上,不要定义Py_DEBUG . 或者,您可以直接修改pyconfig.h文件而无需先复制它 .
问题出现是因为python在调试模式下编译了额外的代码,这在发布模式中找不到,因此如果编译正确,则lib和dll应该不相同 .