vs2013下c++調用python腳本函數 出現的一些問題總結


 

原文作者:aircraft

原文地址:https://www.cnblogs.com/DOMLX/p/9530834.html

 

 

 

首先是配置:

  

使用VS2013創建工程。

 

將libs中的python27.lib復制一份重命名為python27_d.lib(這個的原因是include目錄下的pyconfig.h里面的代碼再debug下調用的是python27_d.lib)。否則會出現以下錯誤:

點擊項目右鍵,在屬性->c/c++->常規項->附加包含目錄中添加..\include。在屬性->鏈接器->常規->附加庫依賴中添加..\libs。在屬性->鏈接器->輸入->附加依賴項中添加python27_d.lib。

按照以上步驟就會將其已經配置好了。這時候就可以進行測試了。

(若出錯 >LINK : fatal error LNK1104: 無法打開文件“python27_d.lib”)就是上面的原因

 

注意 你們復制粘貼可能會吧TAB 變成空格 導致報錯 自己縮進全部刪除調一調

    #include "stdafx.h"
    #include <python.h>
     
    int main()
    {
    	Py_Initialize();  //調用Py_Initialize()進行初始化
    	PyRun_SimpleString("print 'Hello World!!'");
    	Py_Finalize(); //調用Py_Finalize,和Py_Initialize相對應的.
     system("pause"); return 0; }

 

 

 

1>pythonIniti.obj : error LNK2019: 無法解析的外部符號 __imp___Py_NegativeRefcount,該符號在函數 "public: __thiscall boost::python::api::object_base::~object_base(void)" (??1object_base@api@python@boost@@QAE@XZ) 中被引用
1>pythonIniti.obj : error LNK2001: 無法解析的外部符號 __imp___Py_RefTotal


解決方法

修改兩個頭文件

1 注釋掉object.h第56行

//#define Py_TRACE_REFS

2 pyconfig.h 375行

//#    define Py_DEBUG

以上兩個宏定義注釋掉以后重新編譯 問題解決

如果還不能解決那么可能是因為版本問題 python 是release版本的

正式版本編譯沒有問題,問題在於我們安裝的是release版本的python

找到 python的安裝目錄 c:/python25/include/pyconfig.h,注釋掉以下代碼

    1. //#ifdef _DEBUG
    2. //# define Py_DEBUG
    3. //#endif

這樣讓它無論是debug版本還是release版,都按照release版本來做lib庫的鏈接,這樣問題解決,或者直接在VS下就用release跑試試

 

 

 

 

error LNK2001: 無法解析的外部符號 __imp_PyString_FromString
error LNK2001: 無法解析的外部符號 __imp_PyCallable_Check

error LNK2001: 無法解析的外部符號 __imp_PyObject_CallObject
error LNK2001: 無法解析的外部符號 __imp_Py_Initialize

error LNK2001: 無法解析的外部符號 __imp_Py_IsInitialized

error LNK2001: 無法解析的外部符號 __imp_PyImport_Import

error LNK2001: 無法解析的外部符號 __imp_PyModule_GetDict

error LNK2001: 無法解析的外部符號 __imp_PyDict_GetItemString

error LNK2001: 無法解析的外部符號 __imp_PyRun_SimpleStringFlags

error LNK2001: 無法解析的外部符號 __imp_Py_Finalize

fatal error LNK1120: 10 個無法解析的外部命令

 

解決辦法:查看自己的python 版本與VS編譯的版本是否一樣,比如很多人是64位的電腦 就下載了 64的python  

而VS默認編譯是WIN32的  這時候把項目屬性的  運行平台改成 X64就行了  注意了改變之后可能你的屬性表要重新配置一遍了,因為之前你可能是在WIN32下配置的

 

 

若有興趣交流分享技術,可關注本人公眾號,里面會不定期的分享各種編程教程,和共享源碼,諸如研究分享關於c/c++,python,前端,后端,opencv,halcon,opengl,機器學習深度學習之類有關於基礎編程,圖像處理和機器視覺開發的知識


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM