| Newsgroups |
gmane.linux.lfs.beyond.devel |
| Message-ID |
<[email protected]> |
On Sun, 2025-05-25 at 16:45 +0200, Pierre Labastie wrote:
> On Sun, 2025-05-25 at 21:54 +0800, Xi Ruoyao wrote:
> > On Sun, 2025-05-25 at 14:45 +0200, Pierre Labastie wrote:
> > > On Sat, 2025-05-24 at 12:39 +0800, Xi Ruoyao wrote:
> > > > On Sat, 2025-05-24 at 12:12 +0800, Xi Ruoyao wrote:
> > > > > On Fri, 2025-05-23 at 23:20 +0200, Pierre Labastie wrote:
> > > > > > /usr/lib/cmake/protobuf/protobuf-targets.cmake contains:
> > > > > > -----
> > > > > > add_library(protobuf::libupb STATIC IMPORTED)
> > > > > > -----
> > > > > > So if we remove libupb.a as done in protobuf instructions
> > > > > > (since
> > > > > > protobuf-31), any CMakeLists.txt using this file will fail
> > > > > > with:
> > > > > > ----------
> > > > > > CMake Error at /usr/lib/cmake/protobuf/protobuf-
> > > > > > targets.cmake:132
> > > > > > (message):
> > > > > > The imported target "protobuf::libupb" references the file
> > > > > >
> > > > > > "/usr/lib/libupb.a"
> > > > > >
> > > > > > but this file does not exist. Possible reasons include:
> > > > > >
> > > > > > * The file was deleted, renamed, or moved to another
> > > > > > location.
> > > > > >
> > > > > > * An install or uninstall procedure did not complete
> > > > > > successfully.
> > > > > >
> > > > > > * The installation package was faulty and contained
> > > > > >
> > > > > > "/usr/lib/cmake/protobuf/protobuf-targets.cmake"
> > > > > >
> > > > > > but not all the files it references.
> > > > > > -----------
> > > > > > So I think we should remove the line "rm /usr/lib/libupb.a"
> > > > > > when
> > > > > > installing protobuf. libupb.a is about 520KB in size...
> > > > >
> > > > > The problem here is not to save space. It's just it shouldn't
> > > > > be
> > > > > installed even per upstream documentation
> > > > > (
> > > > > https://github.com/protocolbuffers/protobuf/blob/main/upb/README.md
> > > > > )
> > > > > :
> > > > >
> > > > > While upb offers a C API, the C API & ABI are not stable.
> > > > > For
> > > > > this
> > > > > reason, upb is not generally offered as a C library for
> > > > > direct
> > > > > consumption, and there are no releases.
> > > > >
> > > > > I'll try to figure out a way to prevent it from being
> > > > > installed.
> > > >
> > > > Tentative patch:
> > > >
> > > > diff --color -Naur protobuf-31.0/cmake/install.cmake protobuf-
> > > > 31.0.patched/cmake/install.cmake
> > > > --- protobuf-31.0/cmake/install.cmake 2025-05-14
> > > > 23:37:13.000000000 +0800
> > > > +++ protobuf-31.0.patched/cmake/install.cmake 2025-05-24
> > > > 12:39:08.572837445 +0800
> > > > @@ -37,9 +37,6 @@
> > > > if (protobuf_BUILD_LIBPROTOC)
> > > > list(APPEND _protobuf_libraries libprotoc)
> > > > endif (protobuf_BUILD_LIBPROTOC)
> > > > -if (protobuf_BUILD_LIBUPB)
> > > > - list(APPEND _protobuf_libraries libupb)
> > > > -endif ()
> > > >
> > > > foreach(_library ${_protobuf_libraries})
> > > > if (UNIX AND NOT APPLE)
> > > > diff --color -Naur protobuf-31.0/cmake/libprotoc.cmake protobuf-
> > > > 31.0.patched/cmake/libprotoc.cmake
> > > > --- protobuf-31.0/cmake/libprotoc.cmake 2025-05-14
> > > > 23:37:13.000000000 +0800
> > > > +++ protobuf-31.0.patched/cmake/libprotoc.cmake 2025-05-24
> > > > 12:28:03.095300298 +0800
> > > > @@ -16,8 +16,8 @@
> > > > set_target_properties(libprotoc PROPERTIES
> > > > LINK_DEPENDS ${protobuf_SOURCE_DIR}/src/libprotoc.map)
> > > > endif()
> > > > -target_link_libraries(libprotoc PRIVATE libprotobuf)
> > > > -target_link_libraries(libprotoc PUBLIC libupb
> > > > ${protobuf_ABSL_USED_TARGETS})
> > > > +target_link_libraries(libprotoc PRIVATE libprotobuf libupb)
> > > > +target_link_libraries(libprotoc PUBLIC
> > > > ${protobuf_ABSL_USED_TARGETS})
> > > > protobuf_configure_target(libprotoc)
> > > > if(protobuf_BUILD_SHARED_LIBS)
> > > > target_compile_definitions(libprotoc
> > > >
> > > This fails with:
> > > FAILED:
> > > CMakeFiles/protoc.dir/src/google/protobuf/compiler/main.cc.o
> > > /usr/bin/c++ -DPROTOBUF_USE_DLLS -I/sources/protobuf/protobuf-
> > > 31.0/build -I/sources/protobuf/protobuf-31.0 -
> > > I/sources/protobuf/protobuf-31.0/build/src -
> > > I/sources/protobuf/protobuf-31.0/src -I/sources/protobuf/protobuf-
> > > 31.0/third_party/utf8_range -O3 -DNDEBUG -fPIE -MD -MT
> > > CMakeFiles/protoc.dir/src/google/protobuf/compiler/main.cc.o -MF
> > > CMakeFiles/protoc.dir/src/google/protobuf/compiler/main.cc.o.d -o
> > > CMakeFiles/protoc.dir/src/google/protobuf/compiler/main.cc.o -c
> > > /sources/protobuf/protobuf-
> > > 31.0/src/google/protobuf/compiler/main.cc
> > >
> > > In file included from /sources/protobuf/protobuf-
> > > 31.0/upb/reflection/common.h:15,
> > > from /sources/protobuf/protobuf-
> > > 31.0/upb/reflection/def_pool.h:15,
> > > from /sources/protobuf/protobuf-
> > > 31.0/upb/reflection/def.h:12,
> > > from /sources/protobuf/protobuf-
> > > 31.0/upb/reflection/def.hpp:26,
> > > from /sources/protobuf/protobuf-
> > > 31.0/upb_generator/minitable/generator.h:9,
> > > from /sources/protobuf/protobuf-
> > > 31.0/src/google/protobuf/compiler/main.cc:20:
> > > /sources/protobuf/protobuf-
> > > 31.0/upb/reflection/descriptor_bootstrap.h:14:10: fatal error:
> > > google/protobuf/descriptor.upb.h: No such file or directory
> > > 14 | #include "google/protobuf/descriptor.upb.h"
> >
> > This was the original error building with -D
> > protobuf_BUILD_LIBUPB=OFF
> > IIRC. My patch still doesn't fix it. It just removes libupb from
> > the
> > installation (and also the protobuf-targets.cmake file).
>
> You are right. This is the same error. But if protobuf is already
> installed, this file is in /usr/include/protobuf, and then there is
> another error: -llibpub is not found during the final linking of
> libprotoc.
This seems unclear to me. What is "-llibpub"?
protobuf-31.0 just builds fine with the patch and the book instructions.
libupb.a is still built but not installed. So when does the error show
up?
> It seems upstream will completely remove the dependency of libprotoc on
> libupb for protobuf-32, due in July [1]. Until then, I suggest just
> removing the line "rm /usr/lib/libupb.a" in our install instructions,
> so that Qt be buildable when protobuf is installed, and revisit this in
> July...
>
> We could also downgrade to protobuf-30...
Or disable protobuf when building Qt. I'd say Google has completely
made the protobuf/grpc things a mess.
--
Xi Ruoyao <[email protected]>
School of Aerospace Science and Technology, Xidian University
--
http://lists.linuxfromscratch.org/sympa/info/blfs-dev
Unsubscribe: See the above information page