python - 为什么链接器在未在任何地方指定时寻找 python36_d.lib?

标签 python c++ swig

我正在编译 Python C++ extension module使用 VS 2017 和 SWIG。

扩展模块(.pyd 文件)的链接器(用于调试配置)的命令是:

/OUT:"D:\TFS\Dev\CGALSwig\cgal-swig-binding-4.x\build\build-python\CGAL\_CGAL_Kernel.pyd" /MANIFEST /NXCOMPAT /PDB:"D:/TFS/Dev/CGALSwig/cgal-swig-binding-4.x/build/build-python/CGAL/_CGAL_Kernel.pdb" /DYNAMICBASE "C:\Users\helloworld\AppData\Roaming\python\libs\python36.lib" "Debug\CGAL_Kernel_cpp.lib" "D:\TFS\Dev\CGALSwig\mpfr\lib\libmpfr-4.lib" "D:\TFS\Dev\CGALSwig\gmp\lib\libgmp-10.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "comdlg32.lib" "advapi32.lib" /IMPLIB:"D:/TFS/Dev/CGALSwig/cgal-swig-binding-4.x/build/build-python/CGAL/Debug/CGAL_Kernel.lib" /DEBUG /DLL /MACHINE:X64 /INCREMENTAL /PGD:"D:\TFS\Dev\CGALSwig\cgal-swig-binding-4.x\build\build-python\CGAL\_CGAL_Kernel.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"_CGAL_Kernel_python.dir\Debug\_CGAL_Kernel.pyd.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /LIBPATH:"D:/TFS/Dev/CGALSwig/cgal-swig-binding-4.x/build/build-python/CGAL" /LIBPATH:"D:/TFS/Dev/CGALSwig/cgal-swig-binding-4.x/build/build-python/CGAL/Debug" /TLBID:1 

这清楚地表明依赖于 python36.lib 而不是 python36_d.lib。 尽管如此,链接器仍会抛出此错误:

LNK1104 : cannot open file 'python36_d.lib'

当调试 LIB 不在链接器参数中时,为什么链接器要查找它?

最佳答案

埋藏在 Python.h 包含的头文件中的是这段代码:

#           if defined(_DEBUG)
#               pragma comment(lib,"python36_d.lib")
#           elif defined(Py_LIMITED_API)
#               pragma comment(lib,"python3.lib")
#           else
#               pragma comment(lib,"python36.lib")
#           endif /* _DEBUG */

如果定义了 _DEBUG,预处理器会选择 python36_d.lib 进行自动链接,即调试 MSVC 构建。

关于python - 为什么链接器在未在任何地方指定时寻找 python36_d.lib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60522969/

相关文章:

python - 逐行比较2个文件

c++ - 了解两个结构(仿函数)中 typedef 的范围

c++ - 调试 C++ native Windows Phone 8 应用程序

c++ - 如何将 OutputDebugString 与 std::string 一起使用?

c - 如何使用 SWIG 包装带有可变参数的 C 函数

c# - 将 boost::signal 包装到 C# 委托(delegate)

python - 在 2D numpy 数组中查找和删除回文行

Python - 获取 Pandas 的 Apply 函数上的值的索引

python - 如何在 python 中将 SHGetFileInfo 与 SHGFI_PIDL 一起使用

java - 如何在swig中使用同一个接口(interface)生成两个代理类