使用setuptools和CMake构建C++ Pybind11扩展生成.so目录

9w11ddsr  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(177)

我正在尝试使用setuptools通过CMake安装一个带有Pybind11接口的C++库。对于将CMake与setuptools一起使用,我使用了以下答案中的代码:扩展setuptools扩展以使用www.example.com中的CMakesetup.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目录中的命令行上运行完全相同的命令时,一切都正常。
有人能给我一个提示吗,哪里可能出了问题?

mrphzbgm

mrphzbgm1#

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

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

这为要构建的目标创建了一个目录。构建目标失败了,因为已经有一个同名的目录。我可以通过替换第二行来解决这个问题,如下所示:

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

相关问题