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

作者: , 共 2105 字 , 共阅读 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 ..

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"
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

Q. E. D.

类似文章:
相似度: 0.163
armadillo是一个线性代数 C++库,封装了blaslapack,提供更直观的接口。
相似度: 0.150
boost是除std外最常用的 C++库,覆盖很多常用操作。目前最新的版本是1.59.0
由 Facebook 开发和维护的 C++库 Folly 提供了锁folly::MicroLock,代码文件地址:https://github.com/facebook/folly/blob/master/folly/MicroLock.h
编程 » 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
IT » Linux系统配置
查看当前 DNS :
编程 » C++, folly
高效程序总是尽量避免频繁触碰在堆上分配和释放内存,所以无论是std::string还是folly:fbstring都做了SSO( small string optimization )。而folly::FixedString是一个很有意思的实现,它可以把任意长度的字符串都放在堆上。代码可见https://github.com/facebook/folly/blob/master/folly/FixedString.h
编程 » C++, GCC, 编译链接
LD 在链接生成目标文件时,会从左到有扫描输入的依赖库,当依赖库之间也有依赖关系时,必须将「依赖别人的库」放在「被别人依赖的库」的前面。否则会链接失败!失败的症状有:
编程 » folly, C++, 数据容器
由 Facebook 开发和维护的 C++库 Folly 提供folly::small_vector,代码文件地址:https://github.com/facebook/folly/blob/master/folly/small_vector.h
编程 » C++, 数据容器, folly
folly::dynamic提供类似于C++的动态类型。和std::any可以容纳任意类型不一样,folly::dynamic只支持保存以下几种类型:
编程 » C++, folly
folly::fbstring是一个完全兼容std::string的类,可以做到无缝替换,而且性能更高。其代码参见https://github.com/facebook/folly/blob/master/folly/FBString.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