-
Notifications
You must be signed in to change notification settings - Fork 36
Open
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{"[email protected]"});
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.
josephjaspers
Metadata
Metadata
Assignees
Labels
No labels