pybind / pybind/pybind11_protobuf
How to integrate this in a CMake project?
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 67
- Forks
- 37
- PR merge metrics
- No merged PRs in 30d
Description
I am very interested in getting this to run in a CMake project and possibly contributing to make that happen.
I have this repo cloned as a submodule inside a small test project, but cannot get this to compile / run without linker errors.
This is my current setup:
Files
extern/pybind11_protobuf
CMakeLists.txt
fastproto.cpp
Person.proto
Person.proto:
syntax = "proto2";
message Person {
required int32 id = 2;
required string name = 1;
optional string email = 3;
}
fastproto.cpp
#include <pybind11/pybind11.h>
#include "Person.pb.h"
#include <string>
#include "pybind11_protobuf/native_proto_caster.h"
Person get_person() {
Person person;
person.set_id(1);
person.set_name(std::string{"Maximilian Nöthe"});
person.set_email(std::string{"maximilian.noethe@tu-dortmund.de"});
return person;
}
PYBIND11_MODULE(fastproto, m) {
pybind11_protobuf::ImportNativeProtoCasters();
m.def("get_person", &get_person);
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.17..3.22)
project(Quirc++ VERSION 0.1.0 LANGUAGES C CXX)
include(GNUInstallDirs)
find_package(Python3 REQUIRED COMPONENTS Development Interpreter)
find_package(pybind11 REQUIRED)
find_package(Protobuf REQUIRED)
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS Person.proto)
pybind11_add_module(
fastproto
fastproto.cpp
${PROTO_SRCS}
extern/pybind11_protobuf/pybind11_protobuf/native_proto_caster.cc
extern/pybind11_protobuf/pybind11_protobuf/proto_cast_util.cc
extern/pybind11_protobuf/pybind11_protobuf/proto_utils.cc
)
target_include_directories(fastproto PRIVATE ${CMAKE_CURRENT_BINARY_DIR} extern/pybind11_protobuf)
target_link_libraries(fastproto PRIVATE protobuf::libprotobuf)
target_compile_features(fastproto PRIVATE cxx_std_14)
set_target_properties(fastproto PROPERTIES
CXX_EXTENSIONS OFF
CXX_STANDARD_REQUIRED ON
)
Or use the repo here: https://github.com/maxnoe/pybind_protobuf_test
Experimenting with this, I had several issues. However now in this version including the sources my main problem is that a protobuf header is not found:
❯ cmake --build build
-- Found pybind11: /usr/include (found version "2.9.0")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/maxnoe/Projects/protobuf_pybind/build
Consolidate compiler generated dependencies of target fastproto
[ 14%] Building CXX object CMakeFiles/fastproto.dir/extern/pybind11_protobuf/pybind11_protobuf/proto_cast_util.cc.o
/home/maxnoe/Projects/protobuf_pybind/extern/pybind11_protobuf/pybind11_protobuf/proto_cast_util.cc:19:10: fatal error: python/google/protobuf/proto_api.h: No such file or directory
19 | #include "python/google/protobuf/proto_api.h"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/fastproto.dir/build.make:126: CMakeFiles/fastproto.dir/extern/pybind11_protobuf/pybind11_protobuf/proto_cast_util.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/fastproto.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
It seems to be this one:
https://github.com/protocolbuffers/protobuf/blob/master/python/google/protobuf/proto_api.h
But that seems not to be part of an installed protobuf.
Any help on getting this to run would be appreciated.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with CMakeLists.txt and pybind11_protobuf/proto_cast_util.cc, then inspect the installed Protobuf development files for python/google/protobuf/proto_api.h and the configured include paths. Verify the minimal CMake project builds and runs without the missing-header or linker errors.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cmake, cpp, python
- Domain
- build-system
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100