Windows10下Anaconda环境中如何通过Boost.Python实现Python调用C/C++?
Can I use conda-installed Boost.Python on Windows 10 + Anaconda for Python-C/C++ interop?
Absolutely, you can fully leverage Boost.Python from a conda-installed Boost in a Windows 10 + Anaconda environment to enable Python calls to C/C++ code. This setup is supported and used in real-world applications—your errors are caused by mismatched library naming, incorrect compiler flags, and misconfigured CMake settings, all of which are fixable.
Let’s break down the fixes for your issues:
1. Fix manual compilation errors
The key mistakes in your original commands were:
- Using the wrong Boost library name (conda’s Boost appends Python version numbers to library names, e.g.,
boost_python38for Python 3.8, notboost_python) - Using a Linux-style
.sosuffix (Windows Python extensions use.pydfor dynamic libraries) - Missing critical compiler macros to link Boost correctly
- Incorrect library paths for Anaconda’s Python import library
Correct g++ compilation command:
g++ -std=c++11 -shared -DBOOST_PYTHON_DYN_LINK ^ -I C:\App\Anaconda3\include ^ -I C:\App\Anaconda3\Library\include ^ hello.cpp ^ -L C:\App\Anaconda3\Library\lib ^ -L C:\App\Anaconda3\libs ^ -lboost_python38 ^ -lpython38 ^ -o hello.pyd
BOOST_PYTHON_DYN_LINK: Tells the compiler to link against the dynamic Boost.Python library (conda’s Boost is built as dynamic by default)-lboost_python38: Matches the Python 3.8-specific Boost library from conda-lpython38: Links against Anaconda’s Python 3.8 import library (found inlibs/).pyd: Windows-standard suffix for Python extension modules
2. Fix CMake configuration errors
Your CMake setup failed due to outdated commands and incorrect Boost component naming. Here’s a corrected, modern CMakeLists.txt:
CMAKE_MINIMUM_REQUIRED(VERSION 3.18) PROJECT(hello) # Locate Anaconda's Python 3 development files find_package(Python3 REQUIRED COMPONENTS Development) # Locate conda-installed Boost, specifying the Python 3.8 component find_package(Boost 1.73 REQUIRED COMPONENTS python38) # Create the Python extension module Python3_add_library(hello MODULE hello.cpp) # Link required libraries target_link_libraries(hello PRIVATE Boost::python38 Python3::Python ) # Copy test script to build directory FILE(COPY hello.py DESTINATION .) # Add test (optional) ADD_TEST(NAME 01-HelloWorld COMMAND ${Python3_EXECUTABLE} hello.py)
Steps to run CMake:
- Ensure you’re using conda’s installed CMake (run
conda activateyour environment first) - In your
BUILDdirectory, run:cmake .. -G "MinGW Makefiles" -DCMAKE_CXX_COMPILER=g++ mingw32-make
-G "MinGW Makefiles": Tells CMake to generate files compatible with your g++ compiler- Using conda’s CMake ensures it correctly finds your conda-installed Boost and Python
Critical Additional Notes
- Use conda’s compiler for compatibility: If you still hit ABI mismatches, install conda’s MinGW compiler with
conda install -c conda-forge m2w64-gcc—this ensures your compiler matches the one used to build conda’s Boost libraries. - Verify Boost library presence: Check
C:\App\Anaconda3\Library\libforlibboost_python38.dll.a(MinGW) orboost_python38.lib(MSVC). If missing, reinstall Boost from conda-forge (it has more complete Boost packages):conda install -c conda-forge boost-python - Test in Anaconda Prompt: Always run your Python test script from the Anaconda Prompt—it ensures the correct library paths are loaded, avoiding missing DLL errors.
内容的提问来源于stack exchange,提问作者fghoussen
相关产品推荐
相关产品推荐

