它不支持LDFLAGS吗?

问题描述

我是骗子新手。我正在尝试通过scons用gRPC构建程序。 我使用grpc_lib = commands.getoutput('pkg-config --libs protobuf grpc++')获取LDFLAGS。 grpc_lib是一个字符串

-L/home/zty/.local/lib -lprotobuf -lpthread -lgrpc++ -labsl_raw_hash_set -labsl_hashtablez_sampler -labsl_exponential_biased -labsl_hash -labsl_bad_variant_access -labsl_city -labsl_status -labsl_cord -labsl_bad_optional_access -labsl_str_format_internal -labsl_synchronization -labsl_graphcycles_internal -labsl_symbolize -labsl_demangle_internal -labsl_stacktrace -labsl_debugging_internal -labsl_malloc_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations -lgrpc -laddress_sorting -lre2 -lupb -lcares -lz -labsl_raw_hash_set -labsl_hashtablez_sampler -labsl_exponential_biased -labsl_hash -labsl_bad_variant_access -labsl_city -labsl_status -labsl_cord -labsl_bad_optional_access -labsl_str_format_internal -labsl_synchronization -labsl_graphcycles_internal -labsl_symbolize -labsl_demangle_internal -labsl_stacktrace -labsl_debugging_internal -labsl_malloc_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations -lgpr -labsl_str_format_internal -labsl_synchronization -labsl_graphcycles_internal -labsl_symbolize -labsl_demangle_internal -labsl_stacktrace -labsl_debugging_internal -labsl_malloc_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations -lssl -lcrypto

所以我的SConstruct在下面,但未与LDFLAGS链接

import os
import commands
from SCons.Script import *
grpc_lib = commands.getoutput('pkg-config --libs protobuf grpc++')
grpc_cflags = commands.getoutput('pkg-config --cflags protobuf grpc')

mainEnv = Environment(ENV = os.environ)

mainEnv['CXX'] = 'g++'
mainEnv.Append(CXXFLAGS = '-std=c++11')
mainEnv.Append(CPPPATH = '../protos')
mainEnv.Append(CPPFLAGS = grpc_cflags)
mainEnv.Append(LDFLAGS = grpc_lib)

sources = Split("""
                ../protos/CSmalloc.grpc.pb.cc
                ../protos/CSmalloc.pb.cc
                server.cc
                """)
mainEnv.Program('server',sources)

输出

g++ -o /home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos/CSmalloc.grpc.pb.o -c -std=c++11 -lpthread -I/home/zty/.local/include -I/home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos /home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos/CSmalloc.grpc.pb.cc
g++ -o /home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos/CSmalloc.pb.o -c -std=c++11 -lpthread -I/home/zty/.local/include -I/home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos /home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos/CSmalloc.pb.cc
g++ -o server.o -c -std=c++11 -lpthread -I/home/zty/.local/include -I/home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos server.cc
g++ -o server /home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos/CSmalloc.grpc.pb.o /home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos/CSmalloc.pb.o server.o

顺便问一下,有没有更简单的方法可以使用gRPC构建C ++程序?

解决方法

如果使用mainEnv.ParseConfig更容易,它可以将运行pkg-config时的结果直接拆分为正确的构造变量。

关于gRPC ...互联网上至少有一些实验性工作,涉及通过scons平滑使用protobuf。这是其中之一,不确定是否是“最佳”版本:https://github.com/SCons/scons/wiki/ProtocBuilder。您可能还需要更多……您可以加入scons Discord频道进一步聊天。编辑:当Bitbucket删除非git储存库时,尚未意识到页面指向的储存库是被关闭的集合之一,但是它已存档,没有丢失。