http://blog.csdn.net/junparadox/article/details/52704287
http://lib.csdn.net/base/python
簡介
最近在調用caffe的Python接口訓練網絡,需要進到caffe代碼中調試,編譯時需要用Python27_d.lib、Python27_d.dll。但是一般我們下載的都是release版的。怎么辦?自己編譯一個debug版本當然可以,但是很麻煩啊。很多網友解決方法是把Python27.lib、Python27.dll拷貝為Python27_d.lib、Python27_d.dll。
不過拷貝后可能出現一些錯誤。這里說一下我的解決方法。
在vs下引用偽造的”debug版本“可能出現鏈接問題
引用自己偽造的debug版Python27_d.lib、Python27_d.dll可能出現的問題:
-
extmodule.obj : error LNK2019: unresolved external symbol __imp___Py_Dealloc referenced in function _PySwigObject_format
-
extmodule.obj : error LNK2019: unresolved external symbol __imp___Py_NegativeRefcount referenced in function _PySwigObject_format
-
extmodule.obj : error LNK2001: unresolved external symbol __imp___Py_RefTotal
-
extmodule.obj : error LNK2019: unresolved external symbol __imp___PyObject_DebugFree referenced in function _PySwigObject_dealloc
-
extmodule.obj : error LNK2019: unresolved external symbol __imp___PyObject_DebugMalloc referenced in function _PySwigObject_New
-
extmodule.obj : error LNK2019: unresolved external symbol __imp__Py_InitModule4TraceRefs referenced in function _init_extmodule
主要是因為 Py_DEBUG/Py_TRACE_REFS 引起, 修改 Python\include 下的 pyconfig.h, object.h
解決方法
- 修改 pyconfig.h
#ifdef _DEBUG
# define Py_DEBUG
#endif
為
#ifdef _DEBUG
//# define Py_DEBUG
#endif
修改
# ifdef _DEBUG
# pragma comment(lib,"python27_d.lib")
# else
# pragma comment(lib,"python27.lib")
# endif /* _DEBUG */
為
# ifdef _DEBUG
# pragma comment(lib,"python27.lib")
# else
# pragma comment(lib,"python27.lib")
# endif /* _DEBUG */
修改object.h
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
#define Py_TRACE_REFS
#endif
為:
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
// #define Py_TRACE_REFS
#endif