话不多说,编译CMake, TcMalloc, jsoncpp 以及一些其他的库…
C++直接采用 devtoolset-10
环境安装:
1 |
sudo yum install -y autoconf automake libtool pkg-config |
20240923 tkxiong cmake需要先安装 openssl。
CMake 版本3.21.1:
1 2 3 4 5 6 7 8 9 |
wget https://github.com/Kitware/CMake/releases/download/v3.21.1/cmake-3.21.1.tar.gz tar -zxvf cmake-3.21.1.tar.gz && cd cmake-3.21.1 ./bootstrap --prefix=/usr/local/cmake-3.21.1 -- \ -DCMAKE_BUILD_TYPE:STRING=Release \ -DOPENSSL_ROOT_DIR=/usr/local/openssl make sudo make install |
环境配置:
1 2 3 4 5 6 7 |
# 建立链接 cd /usr/local ln -s cmake-3.21.1 cmake # 写入环境信息: vim /etc/profile export PATH=/usr/local/cmake/bin:$PATH |
重启bash, 查看CMake版本:
1 |
cmake --version |
TCMalloc 编译命令:
1 2 3 4 5 6 7 8 9 |
git clone https://gitee.com/tkxiong/gperftools.git cd gperftools/ ../configure --prefix=/usr/local/lib \ --disable-cpu-profiler \ --disable-heap-profiler \ --disable-heap-checker \ --disable-debugalloc \ --enable-minimal make && make install |
–prefix 就是生成路径,需要绝对地址。
如果用cmake的话:
1 2 3 |
mkdir -p release cmake CMakeLists.txt -DCMAKE_INSTALL_PREFIX=./release make && make install |
这个是编译完整版,取 libtcmalloc_minimal.a 用即可.
Jsoncpp
1 2 3 4 5 6 |
git clone https://gitee.com/tkxiong/jsoncpp.git cd jsoncpp/ git checkout 1.9.4 mkdir -p release cmake CMakeLists.txt -DCMAKE_INSTALL_PREFIX=./release make && make install |
-DCMAKE_INSTALL_PREFIX= 就是install路径,可以用相对地址。
20240925 tkxiong Curl库的问题更多
早期低版本使用 7.83.0 版本
下文的want_h2_path, 在7.83.0版本中为: want_nghttp2_pkg_config_path
20240924 tkxiong 这里不应该采用修改 configure 文件的方式,而应该在nghttp2安装目录下新建符号链接从lib指向lib64。
with-openssl 后面不带地址说明使用系统openssl地址。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
wget --no-check-certificate https://curl.se/download/curl-7.83.0.tar.gz tar -zxvf curl-7.83.0.tar.gz cd curl-7.83.0 # 修改configure文件; 需要修改configure文件,才能找到nghttp2. want_h2_path="$withval/lib/pkgconfig" to want_h2_path="$withval/lib64/pkgconfig" mkdir release ./configure --prefix=/data/tkxiong/curl-7.83.0/release \ --with-nghttp2=/data/tkxiong/nghttp2/release \ --with-openssl \ --disable-shared make && make install |
git clone 编译方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
git clone https://github.com/curl/curl.git autoreconf -fi # change configure file: want_h2_path="$withval/lib/pkgconfig" to want_h2_path="$withval/lib64/pkgconfig" # revert code. ... ... # build ./configure --prefix=/data/tkxiong/curl/release \ --with-nghttp2=/data/tkxiong/nghttp2/release \ --disable-shared \ --without-ssl make && make install |
1 |
./curl -vI -g --http2 "http://121.37.5.232:10000/hello/" |
问题还是没解决。 —— 最后是curl修复了代码.
libuv
1 2 3 4 5 6 |
git clone https://gitee.com/tkxiong/libuv.git cd libuv git checkout v1.42.0 mkdir -p release cmake CMakeLists.txt -DCMAKE_INSTALL_PREFIX=./release make && make install |
zlib 1.2.11
1 2 3 4 5 6 7 8 |
cd Download/ wget --no-check-certificate https://zlib.net/zlib-1.2.11.tar.gz cd .. tar -zxvf Download/zlib-1.2.11.tar.gz cd zlib-1.2.11/ mkdir release cmake CMakeLists.txt -DCMAKE_INSTALL_PREFIX=./release make && make install |
protobuf 3.14.0.0
1 2 3 4 5 6 7 8 9 10 |
git clone https://gitee.com/tkxiong/protobuf.git cd protobuf/ git switch -c v3.14.0 git submodule init vim .git/config #修改submodule地址为gitee地址 git submodule update ./autogen.sh mkdir release ./configure --prefix=/data/tkxiong/protobuf/release/ make && make install |
re2
1 2 3 4 5 |
git clone https://gitee.com/tkxiong/re2.git cd re2/ mkdir release cmake CMakeLists.txt -DCMAKE_INSTALL_PREFIX=./release make && make install |
cares-1_18_1
1 2 3 4 5 6 |
git clone https://gitee.com/tkxiong/cares.git cd cares/ git switch -c cares-1_18_1 mkdir release cmake CMakeLists.txt -DCMAKE_INSTALL_PREFIX=./release make && make install |
abseil-cpp 20210324.2
1 2 3 4 5 6 |
git clone https://gitee.com/tkxiong/abseil-cpp.git cd abseil-cpp/ git switch -c 20210324.2 mkdir release cmake CMakeLists.txt -DCMAKE_INSTALL_PREFIX=./release make && make install |
krb5 – kafka依赖库
1 |
sudo yum install -y krb5-devel |
这个库编译.a文件有问题,之前是直接安装的。
Cyrus SASL 2.1.28 – kafka依赖库
Warning: 2.1.28版本不支持OpenSSL 3.x,Cyrus-sasl-2.1.29 release 且官方暂时没有计划出新版本支持。
这里选择编译静态库, 同时保留动态库(参数 --disable-shared
参数同时会引起编译时不使用动态库,导致其他的依赖库找不到)。
增加参数 CFLAGS="-fPIC"
将 -fPIC 标志传递给编译器,确保所有编译的对象文件支持位置无关代码。
这样 libsasl2.a 静态库就可以被用于生成共享库或者其他需要位置无关代码的场景了。
1 2 3 4 5 6 7 8 9 10 |
wget https://github.com/cyrusimap/cyrus-sasl/releases/download/cyrus-sasl-2.1.28/cyrus-sasl-2.1.28.tar.gz tar -xzf cyrus-sasl-2.1.28.tar.gz && cd cyrus-sasl-2.1.28 ./configure --prefix=/usr/local/sasl2 \ --enable-static \ --enable-shared=no \ --with-openssl=/usr/local/openssl \ CFLAGS="-fPIC" make && make install |
我们可以尝试在编译完之后删除 .so 文件。 —— 试了下,不行,会导致rdkafka编译不过。
rdkafka-2.4.3
用make编译就需要手动删除.so文件,同时要注意sasl2需要加入编译。
另外参数 --disable-shared
参数同时会引起编译时不使用动态库,导致其他的依赖库找不到。这个实现与预期不一致,认为是库的bug。
删除了 --enable-gssapi
参数,因为不支持openssl-3.x。
1 2 3 4 5 6 7 8 9 10 11 12 |
wget https://github.com/edenhill/librdkafka/archive/refs/tags/v2.5.3.tar.gz mv v2.5.3.tar.gz librdkafka-v2.5.3.tar.gz tar -zxf librdkafka-v2.5.3.tar.gz && cd librdkafka-2.5.3 ./configure --prefix=/usr/local/librdkafka-2.5.3 \ --enable-static \ --enable-zlib \ --enable-zstd \ --enable-ssl \ --enable-curl \ make -j && make install |
configure 然后 make编译完之后会有一串警告:
注意 -lzstd -lsasl2
这两个如果没有,是不正常的。
1 2 |
WARNING: librdkafka-static.a: No static libraries available/enabled for inclusion in self-contained static library librdkafka-static.a: this library will be identical to librdkafka.a WARNING: librdkafka-static.a: The following libraries were not available as static libraries and need to be linked dynamically: -lm -lcurl -lzstd -lsasl2 -lssl -lcrypto -lz -ldl -lpthread -lrt |
注意2 因为删除了 sasl2 所以信息又变了。
1 2 |
WARNING: librdkafka-static.a: No static libraries available/enabled for inclusion in self-contained static library librdkafka-static.a: this library will be identical to librdkafka.a WARNING: librdkafka-static.a: The following libraries were not available as static libraries and need to be linked dynamically: -lm -lcurl -lzstd -lssl -lcrypto -lz -ldl -lpthread -lrt |
也可以使用CMake的方式编译:
用CMake编译就显式指定不用curl库。(目前看起来问题比configure更大)
1 2 3 4 5 6 7 |
mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/librdkafka-2.5.3 \ -DOPENSSL_ROOT_DIR=/usr/local/openssl \ -DOPENSSL_USE_STATIC_LIBS=ON \ -DRDKAFKA_BUILD_STATIC=1 \ -DWITH_CURL=OFF \ -DCMAKE_PREFIX_PATH=/usr/local/sasl2 |
…