pybind11 で main モジュール上に関数を定義するには、pybind11::module::def 関数を使います。 次の例では、C++ で定義した hello 関数を Python スクリプトから呼び出しています。

sample.cpp

#include <pybind11/embed.h>
#include <pybind11/pybind11.h>

namespace py = pybind11;

void hello()
{
    printf("Hello, world!\n");
}

int main()
{
    // python インタプリタを起動する
    py::scoped_interpreter interpreter;

    // main モジュール上に hello 関数を定義する
    py::module main_module = py::module::import("__main__");
    main_module.def("hello", &hello);

    // python スクリプトから hello 関数を呼び出す
    py::object scope = main_module.attr("__dict__");
    py::exec("hello()", scope);

    return 0;
}
$ # M1 Mac (Ventura) + Python 3.9.6 + pybind11 2.10.3 (Homebrew)
$ clang sample.cpp -std=c++20 -lc++ -lpython3.9 -rpath /Library/Developer/CommandLineTools/Library/Frameworks -I/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/Headers -I/opt/homebrew/Cellar/pybind11/2.10.3/include -L/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib -o sample

$ ./sample
Hello, world!

scoped_interpreter の使い方と、必要なヘッダファイルの詳細は pybind11 で C++ から Python インタプリタを実行する を参照してください。

参考資料