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

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

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

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

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

mkdir _build -p && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/ -DBUILD_SHARED_LIBS=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 -ytou

wget https://github.com/facebook/folly/archive/master.zip -O folly.zip
unzip folly.zip
cd folly-main
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 .. "-DCMAKE_INCLUDE_PATH=/opt/include" "-DCMAKE_LIBRARY_PATH=/opt/lib" -DCMAKE_INSTALL_PREFIX=/opt/ -DFOLLY_SUPPORT_SHARED_LIBRARY=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -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。如果提示缺失文件,执行下面命令:

sudo ln -s /usr/lib/x86_64-linux-gnu/libunwind.so.8.0.1 /usr/local/lib/libunwind.so

Q. E. D.

类似文章:
编程 » C++, log
先编译 libfmt.a :
相似度: 0.211
编程 » C++, GCC, 编译链接
C++的链接分为两部分,一个是编译时,一个是运行时。但运行时的行为也收到编译参数的影响。
相似度: 0.159
armadillo是一个线性代数 C++库,封装了blaslapack,提供更直观的接口。
相似度: 0.144
boost是除std外最常用的 C++库,覆盖很多常用操作。目前最新的版本是1.59.0http://boost.org/上可以查看最新版本号,将下面的 59 换成最新的即可)。
编程 » C++, 编译
一个典型的 GCC C++编译过程为:
编程 » C++, fmt
C++的fmt::format格式化库,由于效率高,功能强大,相关的 API 已经进入C++20,但其文档和 API 细节无法恭维。
IT » Python, Ubuntu
主要是update-alternatives命令的使用。
编程 » 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
由 Facebook 开发和维护的 C++库 Folly 提供了锁folly::MicroLock,代码文件地址:https://github.com/facebook/folly/blob/master/folly/MicroLock.h
相似度: 0.095
编程 » pytorch, C++
目前 pytorch 已经升级到了 1.7.0 ,但在 ubuntu 20.04 下有一个非常诡异的 bug。为此,我们只能自己编译。
新服务器上遇到一个问题, CronJob 计划任务突然不执行,所有用户的任务都失效,之前定时任务执行时发送的邮件也没了。而且间续发作,准确说,每天白天有 14 小时左右不执行,比如从早上 8 点到晚上 10 点,但有时候是从早上 7 点到晚上 9 点。
香植线,也就是香山-植物园拉练路线,从香山邮局出发,经好汉坡到防火道,再往北从樱桃沟下到植物园。总爬升 600 米,路程约 10 公里。