使用setuptools构建Python C++扩展时遇cannot find -lglfw错误求助
解决ld找不到glfw库的问题
你的问题根源是library_dirs的路径没指向实际存放glfw库文件的目录——你编译glfw后,.so和.a文件生成在lib/glfw/src下,但setup.py里只写了lib/glfw,链接器自然找不到库文件。
直接修改setup.py的相关配置即可:
from setuptools import setup, Extension, find_packages module1 = Extension('nerveblox', sources = ['main.cpp', 'src/nerveblox_VM.cpp'], include_dirs=["include", "lib/glfw/include"], # 修正library_dirs为实际库文件所在目录 library_dirs=["lib/glfw/src"], libraries=['glfw'], # 若用动态库,添加runtime_library_dirs确保运行时能找到库 runtime_library_dirs=["lib/glfw/src"], # 补上glfw依赖的系统库(静态链接必须加,动态链接也可能需要) extra_link_args=["-lm", "-lGL", "-lGLU"] ) setup ( name = 'Nerveblox_python_test', version = '1.0', description = 'This is a demo package', ext_modules = [module1], install_requires=[ 'importlib-metadata; python_version == "3.8"', ], )
额外注意两个细节:
- 如果glfw编译出的动态库带版本号(比如
libglfw.so.3),链接器可能识别不了-lglfw,可以在lib/glfw/src目录下创建软链接:ln -s libglfw.so.3 libglfw.so,或者直接在extra_link_args里指定完整库路径 - 纯C++用cmake编译正常是因为cmake自动处理了库路径和依赖,而setuptools需要手动指定所有路径细节
内容的提问来源于stack exchange,提问作者Turgut
相关产品推荐
相关产品推荐

