Solution for link error:Cannot Open File 'python27_d.lib'


引自:http://guangboo.org/2013/01/17/solution-link-errorcannot-open-file-python27_dlib

感謝原作者

使用C調用Python函數或解釋器時,在添加了Include Directories和Library Directories等配置后,仍然編譯錯誤:"LINK : fatal error LNK1104: cannot open file 'python27_d.lib'".代碼如下:

#include <stdio.h>
#include <Python.h>

int main(void)
{
    Py_Initialize();
    if(!Py_IsInitialized()){
        printf("Python Initialize failed.\n");
        return 1;
    }

    PyRun_SimpleString("print('hello world!')");
    Py_Finalize();
    system("pause");

    return 0;
}

 

Stackoverflow貼出了pyconfig.h頭文件中對Python27_d.lib的引用(http://stackoverflow.com/questions/11311877/creating-a-dll-from-a-wrapped-cpp-file-with-

swig/14372472#14372472),該文件用於調試用,如下代碼:

/* For Windows the Python core is in a DLL by default.  Test
Py_NO_ENABLE_SHARED to find out.  Also support MS_NO_COREDLL for b/w compat */
#if !defined(MS_NO_COREDLL) && !defined(Py_NO_ENABLE_SHARED)
#    define Py_ENABLE_SHARED 1 /* standard symbol for shared library */
#    define MS_COREDLL    /* deprecated old symbol */
#endif /* !MS_NO_COREDLL && ... */

/*  All windows compilers that use this header support __declspec */
#define HAVE_DECLSPEC_DLL

/* For an MSVC DLL, we can nominate the .lib files used by extensions */
#ifdef MS_COREDLL
#    ifndef Py_BUILD_CORE /* not building the core - must be an ext */
#        if defined(_MSC_VER)
            /* So MSVC users need not specify the .lib file in
            their Makefile (other compilers are generally
            taken care of by distutils.) */
#            ifdef _DEBUG
#                pragma comment(lib,"python27_d.lib")
#            else
#                pragma comment(lib,"python27.lib")
#            endif /* _DEBUG */
#        endif /* _MSC_VER */
#    endif /* Py_BUILD_CORE */
#endif /* MS_COREDLL */

 

  

可以發現,只有MS_NO_COREDLL或Py_NO_ENABLE_SHARED被定義了,那么#ifdef MS_COREDLL塊的代碼就不會被編譯。因此可以在Configuration Properties->C/C++->Preprocessor->Preprocessor Definitions添加MS_NO_COREDLL或Py_NO_ENABLE_SHARED,去掉_DEBUG,將沒有效果。也可以在引用python.h頭文件前添加#define MS_NO_COREDLL或#define Py_NO_ENABLE_SHARED。


免責聲明!

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



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