Search code examples
pythonclinkercontinuous-integrationpython-c-api

Cibuildwheel Fails to Compile With Static Libraries


I have a Python C extension module which relies on static libraries. Below is my file tree, I haven't included all the files because I am trying to simplify the problem.

folder/
├── src/
|   ├── main.c
|   └── other.c
├── include/
|   ├── glfw3native.h
|   └── glfw3.h
├── lib/
|   └── libglfw3.a
└── setup.py

Below is my setup.py file, I have removed some unnecessary lines.

import setuptools

setuptools.setup(
    ext_modules = [
        setuptools.Extension(
            "Module.__init__", ["src/main.c", "src/other.c"],
            include_dirs = ["include"],
            library_dirs = ["lib"],
            libraries = ["glfw"])
    ])

I can successfully compile my project with the following command.

python setup.py bdist_wheel

Now I want to use cibuildtools to compile my project for multiple platforms.

cibuildwheel --platform linux

For some reason, the program crashes when it tries to link the libraries. Even though the library path is stated, it shows the following error.

cannot find -lglfw

Why does this happen when compiling with cibuildwheel?


Solution

  • Because static binaries are different on every system, I need to compile my libraries on the corresponding platform. In the end, I used the CIBW_BEFORE_ALL variable to execute the build commands for my libraries.