丢失对 protobuf 包的依赖
Xmake 版本
v2.7.9
操作系统版本和架构
Linux 10-16-43-32 5.14.0-70.13.1.el9_0.x86_64 #1 SMP PREEMPT Wed May 25 21:01:57 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
描述问题
缺少对 protobuf 的依赖,看起来是走了系统库。最后 link 的时候也没有 -lprotobuf 如果去掉对 grpc 包的依赖,就正常了。grpc 是我系统中的包。
set_project("test")
set_languages("c++20")
set_version("1.0.0", {build = "%Y%m%d"})
add_requires("protobuf-cpp", {system = false}) -- 指定 system = false 也没有用
add_requireconfs("protobuf-cpp", {override = true, version = "3.14.0"}) -- 没有用
add_requires("grpc") -- 这个应该是找到了系统库
--add_requireconfs("grpc.protobuf-cpp", {override = true, version = "3.14.0"}) -- 没有用
target("demo")
set_kind("binary")
add_files("src/main.cc")
add_files("src/demo.proto")
add_rules("protobuf.cpp")
add_packages("protobuf-cpp")
add_packages("grpc")
期待的结果
应该能正常依赖 protobuf
工程配置
附加信息和错误日志
checking for platform ... linux
checking for architecture ... x86_64
checking for gcc ... /opt/rh/gcc-toolset-12/root/usr/bin/gcc
checking for zig ... no
checking for zig ... no
checking for unzip ... /usr/bin/unzip
checking for git ... /usr/bin/git
checking for gzip ... /usr/bin/gzip
checking for tar ... /usr/bin/tar
checking for ping ... /usr/sbin/ping
pinging for the host(gitee.com) ... 34 ms
pinging for the host(gitlab.com) ... 217 ms
pinging for the host(github.com) ... 107 ms
/usr/bin/git rev-parse HEAD
/usr/bin/git rev-parse HEAD
checking for cmake ... no
checking for cmake ... /usr/bin/cmake
checking for xmake::protobuf-cpp ... no
checking for m4 ... no
checking for apt::m4 ... no
checking for pacman::m4 ... no
checking for m4 ... /usr/bin/m4
checking for autoconf ... no
checking for apt::autoconf ... no
checking for autoconf ... /usr/bin/autoconf
checking for libtool ... no
checking for apt::libtool ... no
checking for pacman::libtool ... no
checking for libtool ... /usr/bin/libtool
checking for pkg-config ... no
checking for pkg-config ... /usr/bin/pkg-config
checking for xmake::c-ares ... no
checking for pacman ... no
checking for emerge ... no
checking for brew ... no
checking for pkg-config ... /usr/bin/pkg-config
checking for c-ares ... no
checking for re2 ... pkgconfig::re2 0.0.0
checking for local::re2 ... re2 0.0.0
checking for xmake::abseil ... no
checking for abseil ... no
checking for xmake::openssl ... no
checking for openssl ... pkgconfig::openssl 3.0.1
checking for xmake-repo::openssl ... openssl 3.0.1
checking for xmake::zlib ... no
checking for pacman::zlib ... no
checking for dpkg ... no
checking for apt::zlib1g-dev ... no
checking for zlib ... ::zlib 1.2.11
checking for xmake::grpc ... no
checking for apt::build-essential ... no
checking for grpc ... pkgconfig::grpc 24.0.0
generating.proto.moduledeps src/demo.proto
checking for protoc ... /usr/bin/protoc
checking for gcc ... /opt/rh/gcc-toolset-12/root/usr/bin/gcc
checking for the c++ compiler (cxx) ... gcc
checking for /opt/rh/gcc-toolset-12/root/usr/bin/gcc ... ok
checking for flags (-fPIC) ... ok
checking for flags (-std=c++20) ... ok
checking for flags (-pthread) ... ok
[ 20%]: compiling.proto src/demo.proto
/usr/bin/protoc src/demo.proto -Isrc --cpp_out=build/.gens/demo/linux/x86_64/release/rules/protobuf/src
/opt/rh/gcc-toolset-12/root/usr/bin/gcc -c -m64 -std=c++20 -DNOMINMAX -pthread -std=c++11 -Ibuild/.gens/demo/linux/x86_64/release/rules/protobuf/src -o build/.objs/demo/linux/x86_64/release/gens/rules/protobuf/src/demo.pb.cc.o build/.gens
/demo/linux/x86_64/release/rules/protobuf/src/demo.pb.cc
[ 40%]: cache compiling.release src/main.cc
/opt/rh/gcc-toolset-12/root/usr/bin/gcc -c -m64 -std=c++20 -Ibuild/.gens/demo/linux/x86_64/release/rules/protobuf/src -DNOMINMAX -pthread -o build/.objs/demo/linux/x86_64/release/src/main.cc.o src/main.cc
checking for flags (-MMD -MF) ... ok
checking for flags (-fdiagnostics-color=always) ... ok
checking for g++ ... /opt/rh/gcc-toolset-12/root/usr/bin/g++
checking for the linker (ld) ... g++
checking for /opt/rh/gcc-toolset-12/root/usr/bin/g++ ... ok
checking for flags (-fPIC) ... ok
checking for flags (-pthread) ... ok
[ 60%]: linking.release demo
/opt/rh/gcc-toolset-12/root/usr/bin/g++ -o build/linux/x86_64/release/demo build/.objs/demo/linux/x86_64/release/src/main.cc.o build/.objs/demo/linux/x86_64/release/gens/rules/protobuf/src/demo.pb.cc.o -m64 -L/usr/lib64 -lgrpc -laddress_s
orting -lre2 -lupb -lcares -lz -lgpr -lssl -lcrypto -labsl_raw_hash_set -labsl_hashtablez_sampler -labsl_hash -labsl_city -labsl_low_level_hash -labsl_random_distributions -labsl_random_seed_sequences -labsl_random_internal_pool_urbg -lab
sl_random_internal_randen -labsl_random_internal_randen_hwaes -labsl_random_internal_randen_hwaes_impl -labsl_random_internal_randen_slow -labsl_random_internal_platform -labsl_random_internal_seed_material -labsl_random_seed_gen_exceptio
n -labsl_statusor -labsl_status -labsl_cord -labsl_cordz_info -labsl_cord_internal -labsl_cordz_functions -labsl_exponential_biased -labsl_cordz_handle -labsl_bad_optional_access -labsl_str_format_internal -labsl_synchronization -labsl_gr
aphcycles_internal -labsl_stacktrace -labsl_symbolize -labsl_debugging_internal -labsl_demangle_internal -labsl_malloc_internal -labsl_time -labsl_civil_time -labsl_strings -labsl_strings_internal -lrt -labsl_base -labsl_spinlock_wait -la
bsl_int128 -labsl_throw_delegate -labsl_time_zone -labsl_bad_variant_access -labsl_raw_logging_internal -labsl_log_severity -pthread
/opt/rh/gcc-toolset-12/root/usr/bin/ld: build/.objs/demo/linux/x86_64/release/gens/rules/protobuf/src/demo.pb.cc.o: in function InitDefaultsscc_info_Test_demo_2eproto()': demo.pb.cc:(.text+0x1f): undefined reference to google::protobuf::internal::VerifyVersion(int, int, char const*)'
/opt/rh/gcc-toolset-12/root/usr/bin/ld: build/.objs/demo/linux/x86_64/release/gens/rules/protobuf/src/demo.pb.cc.o: in function InitDefaultsscc_info_TestCase_demo_2eproto()': demo.pb.cc:(.text+0xa5): undefined reference to google::protobuf::internal::VerifyVersion(int, int, char const*)'
/opt/rh/gcc-toolset-12/root/usr/bin/ld: build/.objs/demo/linux/x86_64/release/gens/rules/protobuf/src/demo.pb.cc.o: in function test::TestCase::TestCase(test::TestCase const&)': demo.pb.cc:(.text+0x2e2): undefined reference to google::protobuf::internal::ArenaStringPtr::Set(google::protobuf::internal::ArenaStringPtr::EmptyDefault, std::__cxx11::basic_string<char, std::char_traits
Bot detected the issue body's language is not English, translate it automatically.
Title: package dependency version error
add_requireconfs("grpc.protobuf-cpp", {override = true, version = "3.14.0"}) -- 没有用
内部依赖不想走系统库,那就得依赖改成 system = false,改版本没用
add_requireconfs("grpc.protobuf-cpp", {override = true, system = false})
Bot detected the issue body's language is not English, translate it automatically.
add_requireconfs("grpc.protobuf-cpp", {override = true, version = "3.14.0"}) -- didn't work
If you don’t want to use the system library for internal dependencies, you have to change the dependency to system = false, and changing the version is useless
add_requireconfs("grpc.protobuf-cpp", {override = true, system = false})
add_requireconfs("grpc.protobuf-cpp", {override = true, version = "3.14.0"}) -- 没有用
内部依赖不想走系统库,那就得依赖改成 system = false,改版本没用
add_requireconfs("grpc.protobuf-cpp", {override = true, system = false})
这个我也试了,也不行
Bot detected the issue body's language is not English, translate it automatically.
add_requireconfs("grpc.protobuf-cpp", {override = true, version = "3.14.0"}) -- didn't work
Internal dependencies do not want to use the system library, then you have to change the dependency to system = false, changing the version is useless
add_requireconfs("grpc.protobuf-cpp", {override = true, system = false})
I tried this too, it doesn't work