在 Ubuntu 上安装 Facebook 的 C++ 库 Folly

作者: , 共 2311 字 , 共阅读 0

Folly 官方地址:https://github.com/facebook/folly

folly 依赖格式化库fmt,需手工安装:

cd ~/3rd;
git clone https://github.com/fmtlib/fmt.git && cd fmt

mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/ -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE

make -j$(nproc)
sudo make install

下面脚本下载库文件到~/3rd,编译安装到/opt/include/opt/lib

cd ~/3rd;
sudo apt-get install g++ cmake libevent-dev libdouble-conversion-dev libgoogle-glog-dev libgflags-dev libiberty-dev liblz4-dev liblzma-dev libsnappy-dev make zlib1g-dev binutils-dev libjemalloc-dev libssl-dev pkg-config libunwind-dev unzip -y

wget https://github.com/facebook/folly/archive/master.zip -O folly.zip
unzip folly.zip
cd folly-master
mkdir _build && cd _build
cmake .. "-DCMAKE_INCLUDE_PATH=/opt/include" "-DCMAKE_LIBRARY_PATH=/opt/lib" -DCMAKE_INSTALL_PREFIX=/opt/ -DFOLLY_SUPPORT_SHARED_LIBRARY=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON
make -j
make install  # /opt

folly编译后只有一个libfolly.a库文件,该文件不能用于构建SO文件,会报类似于下面的错误:

/usr/bin/ld: /opt/lib/libfolly.a(F14Table.cpp.o): relocation R_X86_64_TPOFF32 against `_ZZN5folly3f146detail21tlsPendingSafeInsertsElE5value' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /opt/lib/libfolly.a(dynamic.cpp.o): relocation R_X86_64_PC32 against symbol `_ZN5folly7dynamic8typeNameENS0_4TypeE' can not be used when making a shared object; recompile with -fPIC

下面方法可支持构建SO文件:

cmake .. -DBUILD_SHARED_LIBS=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON

其它还可能碰到的错误为:

/usr/bin/ld: warning: libaio.so.1, needed by /opt/lib/libfolly.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libunwind.so.1, needed by /opt/lib/libfolly.so, not found (try using -rpath or -rpath-link)
/opt/lib/libfolly.so: undefined reference to `io_getevents@LIBAIO_0.4'
/opt/lib/libfolly.so: undefined reference to `io_queue_init@LIBAIO_0.1'
/opt/lib/libfolly.so: undefined reference to `io_submit@LIBAIO_0.1'
/opt/lib/libfolly.so: undefined reference to `io_queue_release@LIBAIO_0.1'

本质原因是libfolly.so找不到libaio.solibunwind.so库文件。这可以用命令ldd /your_path/libfolly.so看出来。可以从其它机器将这两个文件复制过来,位置位于:

  • /lib/x86_64-linux-gnu/libaio.so.1.0.1
  • /lib/x86_64-linux-gnu/libaio.so.1 (只是上面文件的软链接)
  • /usr/local/lib/libunwind.so.1

注意: ubuntu 20.04 unwind 版本为 libunwind.so.8

Q. E. D.

类似文章:
相似度: 0.188
编程 » C++, GCC, 编译链接
C++的链接分为两部分,一个是编译时,一个是运行时。但运行时的行为也收到编译参数的影响。
相似度: 0.144
armadillo是一个线性代数 C++库,封装了blaslapack,提供更直观的接口。
相似度: 0.139
boost是除std外最常用的 C++库,覆盖很多常用操作。目前最新的版本是1.59.0
编程 » C++, 编译
一个典型的 GCC C++编译过程为:
编程 » C++, fmt
C++的fmt::format格式化库,由于效率高,功能强大,相关的 API 已经进入C++20,但其文档和 API 细节无法恭维。
IT » Python, Ubuntu
主要是update-alternatives命令的使用。
相似度: 0.106
编程 » pytorch, C++
目前 pytorch 已经升级到了 1.7.0 ,但在 ubuntu 20.04 下有一个非常诡异的 bug。为此,我们只能自己编译。
相似度: 0.098
IT » talib, 技术分析
下面的安装地址可在https://github.com/mrjbq7/ta-lib#troubleshooting上找最新的:
IT » nodejs, linux, npm, WSL, cnpm
Ubuntu 的 apt 源没有自带 nodejs ,需要手工添加 nodejs 的源,然后通过 apt 安装。
由 Facebook 开发和维护的 C++库 Folly 提供了锁folly::MicroLock,代码文件地址:https://github.com/facebook/folly/blob/master/folly/MicroLock.h
新服务器上遇到一个问题, CronJob 计划任务突然不执行,所有用户的任务都失效,之前定时任务执行时发送的邮件也没了。而且间续发作,准确说,每天白天有 14 小时左右不执行,比如从早上 8 点到晚上 10 点,但有时候是从早上 7 点到晚上 9 点。
编程 » folly, C++, 数据容器
由 Facebook 开发和维护的 C++库 Folly 提供folly::sorted_vector_setfolly::sorted_vector_map,是std::mapstd::set在小数据集上的优化版。代码见: https://github.com/facebook/folly/blob/master/folly/sorted_vector_types.h