0%

跑qpid协议

依赖环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
FROM ubuntu:18.04

ENV DEBIAN_FRONTEND=noninteractive

# 安装基础依赖和常用库
RUN apt-get update && apt-get install -y \
build-essential \
cmake \
g++ \
gcc \
make \
libboost-all-dev \
uuid-dev \
pkg-config \
libsasl2-dev \
libnss3-dev \
libnspr4-dev \
doxygen \
graphviz \
help2man \
swig \
libxerces-c-dev \
libxqilla-dev \
libibverbs-dev \
librdmacm-dev \
libdb++-dev \
libaio-dev \
ruby ruby-dev \
wget \
unzip \
git \
&& apt-get clean

# 安装 Python 2 pip 和 setuptools
RUN wget https://bootstrap.pypa.io/pip/2.7/get-pip.py && python2 get-pip.py && rm get-pip.py

# 下载 Qpid-C++ 源码(可以替换成你自己的仓库)
WORKDIR /opt
RUN git clone https://gitbox.apache.org/repos/asf/qpid-cpp.git

# 创建 build 目录
WORKDIR /opt/qpid-cpp
RUN mkdir build

# 配置环境变量
ENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

# 默认进入 bash,方便调试
CMD ["/bin/bash"]

python2.7环境

1
2
3
apt-get install python2.7
ln -s /usr/bin/python2.7 /usr/bin/python
python --version

qpid-cpp 的 CMake 逻辑

顶层 /opt/qpid-cpp/CMakeLists.txt 是总控,主要负责:

  • 定义全局变量

  • 配置 option、include path

  • 调用 add_subdirectory(src)add_subdirectory(bindings) 等子目录的 CMakeLists

而**真正控制 qpidd 编译细节的是 src/CMakeLists.txt**。

1
2
3
add_executable (qpidd ${qpidd_SOURCES} /opt/qpid-cpp/build/coverage_runtime.o)
target_compile_options(qpidd PRIVATE -fsanitize-coverage=trace-pc-guard)
target_link_libraries (qpidd qpidbroker qpidcommon)

编译

1
2
3
4
cd /opt/qpid-cpp/build
rm -rf CMakeCache.txt CMakeFiles
CXX=clang++ CC=clang cmake -DBUILD_PROBES=no ..
make -j$(nproc)

查看是否插桩成功

1
nm qpidd | grep trace_pc_guard

启动 Broker:

1
2
/usr/local/sbin/qpidd
/qpid-cpp/build/src/qpidd
------------- Thank you for reading -------------

Title - Artist
0:00