首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Python 擴展編譯報錯 LNK1181:找不到 m.lib 的解決方案

     編輯:程式設計疑難解答

Python 擴展編譯報錯 LNK1181:找不到 m.lib 的解決方案

在 Windows 上運行 python setup.py install 安裝 C 擴展包(如 pyFM)時,鏈接器報錯 LNK1181: cannot open input file 'm.lib'。原因是缺少 Microsoft C 運行庫中的數學庫 m.lib。

解決步驟

  1. 定位 m.lib:通常位於 Visual Studio 安裝目錄 VC\Tools\MSVC\\lib\x64 或 x86 子目錄。也可在「開發人員命令提示符」中執行 dir /s m.lib 查找。
  2. 修改 setup.py:在 Extension 定義中添加 library_dirs 和 libraries:
    from setuptools import setup, Extension
    
    ext = Extension('pyFM',
                    sources=['src/pyFM.cpp'],
                    library_dirs=[r'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\lib\x64'],
                    libraries=['m'])  # 鏈接 m.lib
    
    setup(name='pyFM', ext_modules=[ext])
  3. 或安裝預編譯 Wheel:若項目提供 .whl 文件,直接 pip install pyFM-*.whl 避開編譯。

背景知識

  • m.lib 提供 math.h 中函數(如 sin, exp)的實現符號。
  • MinGW/GCC 使用 -lm 鏈接 libm.a,MSVC 對應 m.lib。
  • Python 官方構建使用 MSVC,因此需 MSVC 兼容的導入庫。

常見避坑

  • 路徑含空格需加雙引號或使用短路徑 (PROGRA~1)。
  • 32 位 Python 需鏈接 x86 版 m.lib,64 位需 x64 版,勿混淆。
  • Visual Studio Build Tools 免費提供編譯環境,無需安裝完整 IDE。

配置正確後,重新運行 python setup.py install 即可通過鏈接階段。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved