【问题标题】:Building C++ Pybind11 extension with setuptools and CMake generates .so directory使用 setuptools 和 CMake 构建 C++ Pybind11 扩展会生成 .so 目录
【发布时间】:2022-10-06 17:58:30
【问题描述】:

我正在尝试使用 setuptools 使用 CMake 安装带有 Pybind11 接口的 C++ 库。对于将 CMake 与 setuptools 一起使用,我使用以下答案中的代码:Extending setuptools extension to use CMake in setup.py? 我可以使用cmake 手动构建库。 然而不幸的是,在我的项目的根目录中执行pip install . 时,构建失败。 虽然第一次调用 cmake (self.spawn([\'cmake\', str(cwd)] + cmake_args)) 没有任何错误完成,但执行第二次调用 (self.spawn([\'cmake\', \'--build\', \'.\'] + build_args)) 会出现以下错误:

/users/thoerman/miniconda3/envs/postproc_np_products/bin/../lib/gcc/x86_64-conda_cos6-linux-gnu/7.3.0/../../../../x86_64-conda_cos6-linux-gnu/bin/ld: cannot open output file /users/thoerman/postproc_np_products/build/lib.linux-x86_64-cpython-37/postproc_ops_cpp.cpython-37m-x86_64-linux-gnu.so: Is a directory
      collect2: error: ld returned 1 exit status
      gmake[3]: *** [/users/thoerman/postproc_np_products/build/lib.linux-x86_64-cpython-37/postproc_ops_cpp.cpython-37m-x86_64-linux-gnu.so] Error 1
      gmake[2]: *** [CMakeFiles/postproc_ops_cpp.dir/all] Error 2
      gmake[1]: *** [CMakeFiles/postproc_ops_cpp.dir/rule] Error 2
      gmake: *** [postproc_ops_cpp] Error 2

但是,当在build_temp 目录内的命令行上运行完全相同的命令时,一切正常。

有没有人对我有提示,可能出了什么问题?

    标签: cmake setuptools pybind11


    【解决方案1】:

    在进一步挖掘问题后,我自己找到了解决方案。 问题出在线条上

    extdir = pathlib.Path(self.get_ext_fullpath(ext.name))
    extdir.mkdir(parents=True, exist_ok=True)
    

    这为要构建的目标创建了一个目录。然后构建目标失败,因为已经有一个同名的目录。 我能够通过如下替换第二行来解决它:

    extdir.parent.mkdir(parents=True, exist_ok=True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-23
      • 1970-01-01
      • 2018-12-29
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      相关资源
      最近更新 更多