use google quiche as library

2020-08-12  本文已影响0人  help_youself

Reason

The reason is simple: There are always so many projects that are not managered by build.gn.
1 install llvm
Reference:
2 download chromium project
I choose naiveproxy.
3 change some compiling flags in build.sh

  out=out/Release
  flags="
    clang_base_path=\"/usr\"
    clang_use_chrome_plugins=false
    use_custom_libcxx=false
    is_official_build=false
    exclude_unwind_tables=true
    enable_resource_whitelist_generation=false
    is_component_build=true
    target_cpu=\"x64\"
    symbol_level=0"

 After several error, I found the net library is denpended on libstdc++ instead of libc++.

Sample

test.cc

#include "base/logging.h"
#include "base/sys_byteorder.h"
#include "net/third_party/quiche/src/quic/core/quic_versions.h"
#include "net/third_party/quiche/src/quic/core/quic_framer.h"
#include "net/third_party/quiche/src/quic/core/quic_data_writer.h"
#include "net/third_party/quiche/src/quic/core/quic_stream_send_buffer.h"
#include "net/third_party/quiche/src/quic/core/quic_simple_buffer_allocator.h"
#include "net/base/ip_address.h"
#include "base/strings/strcat.h"
#include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
#include "base/strings/strcat.h"
//#include "gtest/gtest.h"
#include <string>
#include <iostream>
using namespace quic;
using namespace net;
using namespace std;
bool MockLogMessageHandler(int severity,
    const char* file, int line, size_t message_start, const std::string& str) {
    std::cout<<file<<" "<<line<<" "<<str<<std::endl;
  return false;
}
using namespace logging;
int main(){

    uint32_t bps=1000000;
    QuicBandwidth bw=QuicBandwidth::FromBitsPerSecond(bps);
    std::cout<<"hello world "<<bw<<std::endl;

    base::StringPiece ip4("127.0.0.2");
    base::StringPiece ip6("2001:db8:1020:3040:5060:7080:90a0:b0c0");
    std::cout<<std::string(ip4.data())<<std::endl;
    IPAddress ip1;
    std::cout<<"shit "<<ip1.ToString()<<std::endl;
    ip1.AssignFromIPLiteral(ip4);
    std::cout<<ip1.ToString()<<std::endl;
    return 0;
}

CMakeLists.txt

PROJECT(project)
cmake_minimum_required(VERSION 2.6)
set(CMAKE_CXX_STANDARD 14)

set(CMAKE_CXX_COMPILER "clang++")
set(CMAKE_C_COMPILER "clang")

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld")



set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
SET(CMAKE_BUILD_TYPE "Release")
#add_definitions(-DNDEBUG)
add_definitions(${CMAKE_C_FLAGS})

set(LIB_INC  ${PROJECT_SOURCE_DIR}/../naiveproxy/src)
set(LIB_DIR  ${PROJECT_SOURCE_DIR}/../naiveproxy/src/out/Release/obj)

include_directories(${LIB_INC})
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/../naiveproxy/src/out/Release) ## for so


set(THIRD_LIB  ${PROJECT_SOURCE_DIR}/../naiveproxy/src/out/Release/obj/third_party)


set(GEN_DIR  ${PROJECT_SOURCE_DIR}/../naiveproxy/src/out/Release/gen)
include_directories(${GEN_DIR}/)  #gen/base/logging_buildflags.h  gen/net/net_buildflags.h
set(EXECUTABLE_NAME "my_test")
add_executable(${EXECUTABLE_NAME} test.cc)
target_link_libraries(${EXECUTABLE_NAME} net base protobuf_lite)#net base protobuf_lite boringssl pthread chrome_zlib

# cmake .. -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++   -DCMAKE_EXE_LINKER_FLAGS=-stdlib=libstdc++
#export LD_LIBRARY_PATH=/home/zsy/chromium/naiveproxy/src/out/Release


## ldd  libnet.so
## libstdc++.so.6 

Build

mkdir build && cd build 
cmake .. -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++   -DCMAKE_EXE_LINKER_FLAGS=-stdlib=libstdc++
make

[1] llvm-install
[2] naiveproxy

上一篇下一篇

猜你喜欢

热点阅读