Accelerated Container Image

Overview

OverlayBD

Accelerated Container Image

Accelerated Container Image is an open-source implementation of paper "DADI: Block-Level Image Service for Agile and Elastic Application Deployment. USENIX ATC'20". It is a solution of remote container image by supporting fetching image data on-demand without downloading and unpacking the whole image before a container running.

At the heart of the acceleration is OverlayBD, which provides a merged view of a sequence of block-based layers as an block device. This repository is a component of Accelerated Container Image, provides an implementation of OverlayBD and as a third-party backing-store of tgt, which is an user space iSCSI target framework.

Getting Started

Building

Requirements

To build OverlayBD, the following dependencies are required:

  • CMake >= 3.8+

  • gcc/g++ >= 7+

  • Libaio, libcurl and openssl runtime and development libraries.

    • CentOS/Fedora: sudo yum install libaio-devel libcurl-devel openssl-devel
    • Debian/Ubuntu: sudo apt install libcurl4-openssl-dev libssl-dev libaio-dev
  • The Linux target framework (tgt)

    • CentOS/Fedora: yum install scsi-target-utils, epel maybe required.
    • Debian/Ubuntu: apt install tgt
  • iscsi-initiator-utils

    • CentOS/Fedora: sudo yum install iscsi-initiator-utils
    • Debian/Ubuntu: sudo apt install open-iscsi

Build

You need git to checkout the source code:

git clone https://github.com/alibaba/overlaybd.git

The whole project is managed by CMake.

cd overlaybd

mkdir build
cd build
cmake ..
make -j
sudo make install

# restart tgt service to reload backing-store
sudo systemctl restart tgtd

A liboverlaybd.so file is installed to /usr/lib{64}/tgt/backing-store,tgtd service has to be restarted to load this dynamic library as a backing-store module. OverlayBD related command-line tools are installed to /opt/overlaybd/bin/.

Configure

The default configuration files are installed after make install.

Default configure file tgt-overlaybd.json is installed to /etc/overlaybd/.

{
    "logLevel": 1,
    "registryCacheDir": "/opt/overlaybd/registry_cache",
    "registryCacheSizeGB": 1,
    "credentialFilePath": "/opt/overlaybd/cred.json",
    "ioEngine": 1,
    "download": {
        "enable": true,
        "delay": 120,
        "delayExtra": 30,
        "maxMBps": 100
    }
}
Field Description
logLevel DEBUG 0, INFO 1, WARN 2, ERROR 3
ioEngine IO engine used to open local files: psync 0, libaio 1, posix aio 2.
registryCacheDir The cache directory for remote image data.
registryCacheSizeGB The max size of cache, in GB.
credentialFilePath The credential used for fetching images on registry. /opt/overlaybd/cred.json is the default value.
download.enable Whether background downloading is enabled or not.
download.delay The seconds waiting to start downloading task after the OverlayBD device launched.
download.delayExtra A random extra delay is attached to delay, avoiding too many tasks started at the same time.
download.maxMBps The speed limit in MB/s for a downloading task.

NOTE: download is the config for background downloading. After an OverlayBD device is lauched, a background task will be running to fetch the whole blobs into local directories. After downloading, I/O requests are directed to local files. Different to other options, download config is reloaded when a device lauching.

Here is an example of credential file described by credentialFilePath field.

{
  "auths": {
    "hub.docker.com": {
      "username": "username",
      "password": "password"
    },
    "hub.docker.com/hello/world": {
      "auth": "dXNlcm5hbWU6cGFzc3dvcmQK"
    }
  }
}

Credentials are reloaded when authentication is required. Credentials have to be updated before expiration if temporary credential is used, otherwise OverlayBD keeps reloading until a valid credential is set.

Important: The corresponding credential has to be set before launching devices.

Usage

OverlayBD is working together with overlaybd-snapshotter and ctr plugin. See EXAMPLES

Licenses

  • OverlayBD is released under the General Public License, Version 2.0.
Issues
  • Framework for accelerating compression using QAT

    Framework for accelerating compression using QAT

    Accelerate compression to provide improved efficiency, scalability and performance. Intel QuickAssist Technology (Intel QAT) offloading Compression from CPU which can save cycles, time and space.

    As the complexity of applications continues to grow, systems need more and more computational resources for workloads, including cryptography and data compression.

    The drivers and patches offered here assist application developers to take advantage of Intel® QuickAssist Integrated Accelerator that is offered with platforms based on Intel® processors.

    To Learn how to use Intel® QuickAssist Technology and run example code, review our tutorial videos on Intel Developer Zone – Intel® QuickAssist Technology Technical Getting Started Tutorials - https://software.intel.com/en-us/networking/quickassist

    Signed-off-by: Haibin Huang [email protected]

    opened by hhb584520 12
  • 请问使用overlaybd后,层缓存还会生效吗

    请问使用overlaybd后,层缓存还会生效吗

    层缓存指的是:不同镜像中某些层内容一样,在机器上共用该层,只需要下载一次

    问题:将这些镜像转换为DADI镜像,相同内容的层还可以共用本地缓存吗

    e.g: 镜像A 层包括: a b c 镜像B 层包括:c d f 镜像A和镜像B层sha256内容一致

    镜像A和镜像B转换加速镜像后

    在同一台机器上,加速镜像A下载完成后,下载加速镜像B时,还需要下载层c吗

    opened by bengbeng-pp 8
  • compile error on gcc-7.5

    compile error on gcc-7.5

    [[email protected] build]# make [ 1%] Building CXX object src/CMakeFiles/image_lib.dir/bk_download.cpp.o In file included from /home/container-acc/overlay-tcmu/overlaybd/src/overlaybd/alog-stdstring.h:19:0, from /home/container-acc/overlay-tcmu/overlaybd/src/bk_download.cpp:22: /home/container-acc/overlay-tcmu/overlaybd/src/overlaybd/string_view.h:29:36: fatal error: experimental/string_view: No such file or directory #include <experimental/string_view> ^ compilation terminated. make[2]: *** [src/CMakeFiles/image_lib.dir/bk_download.cpp.o] Error 1 make[1]: *** [src/CMakeFiles/image_lib.dir/all] Error 2 make: *** [all] Error 2

    opened by beyou923 6
  • MAINTAINERS: add beef9999 and hhb584520 as Reviewers

    MAINTAINERS: add beef9999 and hhb584520 as Reviewers

    #104 hi~ @fuweid , @beef9999 and @hhb584520 have been making a lot of high-level features in overlaybd including IO trace prefetching/OCF cache/Intel DSA hardware supports. https://github.com/containerd/overlaybd/commits?author=beef9999 https://github.com/containerd/overlaybd/commits?author=hhb584520 I would like to invite them as reviewers :D

    • [x] @liulanzheng
    • [x] @BigVan
    • [x] @fuweid
    opened by BigVan 5
  • how to known how much data has been downloaded for a dadi image

    how to known how much data has been downloaded for a dadi image

    I made a test for the overlaybd performance.

    # create container
    nerdctl run --snapshotter overlaybd -d --name test -v /opt/volume:/docker $dadi_image sleep 100000
    # copy data, here the /usr directory cost most of the disk space for the image $dadi_image, and the /opt/volume directory belong to another disk.
    time nerdctl exec -it test cp -r /usr/ /docker/
    

    Then the time that the copy costs seems too little, so I suspect the overlaybd didn't downloaded all the data that the /usr directory really used.

    At the same time, I found the cached data for the image $dadi_image in the cache directory is also too little.

    opened by wxx213 4
  • remove boost dependency

    remove boost dependency

    • Download all boost code, but only use boost-spsc-queue for overlaybd; It makes me feel frustrated when make clean force next time download boost again...
    • For cross platform boost/lockfree/spsc_queue.hpp is the best choice, but now in overlaybd we can try other way
    • Linux kernel kfifo.h is a totally spsc-queue, I code it refer to linux-kernel-v2.6.32,and I success to replace boost with kfifo
    • I test my code by https://github.com/alpc62/lock-free-queue, when make check, unit-test seem very well
    • But I cannot test the performance, my computer CPU only have 2-core, cannot run benchmark for the queue :(
    • I hope your team have a look, try to benchmark it
    opened by alpc62 3
  • overlaybd-tcmu crash

    overlaybd-tcmu crash

    After we sync the latest overlaybd codes(until a1390faccb1c2d82208db4987ac76c046620f384), the overlaybd-tcmu crash when bootup.

    OS version: CentOS Linux release 7.4.1708 (Core) kernel version: 4.18.0

    The backtrace: (gdb) bt #0 0x00007f5194ac4387 in raise () at /lib64/libc.so.6 #1 0x00007f5194ac5a78 in abort () at /lib64/libc.so.6 #2 0x00007f5194abd1a6 in __assert_fail_base () at /lib64/libc.so.6 #3 0x00007f5194abd252 in () at /lib64/libc.so.6 #4 0x00000000004f1554 in alog_format::FMTLogBuffer::printf_fmt<60, 81, , int, alog_noop>(alog_format::ALogFMTString<alog_format::seq<81> >, int const&, alog_noop const&) (this=0x7f518de75f10, fmt=..., [email protected]: -1, xs#0=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:533 #5 0x00000000004f126b in alog_format::next<true, 60>::printf_fmt<alog_format::ALogFMTString<alog_format::seq<81> >, unsigned int, int, alog_noop>(alog_format::FMTLogBuffer&, alog_format::ALogFMTString<alog_format::seq<81> >, unsigned int const&, int const&, alog_noop const&) (log=..., fmt=..., [email protected]: 3473955946, xs#[email protected]: -1, xs#1=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:504 #6 0x00000000004f0cd8 in alog_format::FMTLogBuffer::printf_fmt<50, 59, 81, unsigned int, int, alog_noop>(alog_format::ALogFMTString<alog_format::seq<59, 81> >, unsigned int const&, int const&, alog_noop const&) (this=0x7f518de75f10, fmt=..., [email protected]: 3473955946, xs#[email protected]: -1, xs#1=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:537 #7 0x00000000004f059b in alog_format::next<true, 50>::printf_fmt<alog_format::ALogFMTString<alog_format::seq<59, 81> >, unsigned int, unsigned int, int, alog_noop>(alog_format::FMTLogBuffer&, alog_format::ALogFMTString<alog_format::seq<59, 81> >, unsigned int const&, unsigned int const&, int const&, alog_noop const&) (log=..., fmt=..., [email protected]: 6619904, xs#[email protected]: 3473955946, xs#[email protected]: -1, xs#2=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:504 #8 0x00000000004efa7d in alog_format::FMTLogBuffer::printf_fmt<37, 49, 59, 81, unsigned int, unsigned int, int, alog_noop>(alog_format::ALogFMTString<alog_format::seq<49, 59, 81> >, unsigned int const&, unsigned int const&, int const&, alog_noop const&) (this=0x7f518de75f10, fmt=..., [email protected]: 6619904, xs#[email protected]: 3473955946, xs#[email protected]: -1, xs#2=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:537 #9 0x00000000004eeeac in alog_format::next<true, 37>::printf_fmt<alog_format::ALogFMTString<alog_format::seq<49, 59, 81> >, unsigned long, unsigned int, unsigned int, int, alog_noop>(alog_format::FMTLogBuffer&, alog_format::ALogFMTString<alog_format::seq<49, 59, 81> >, unsigned long const&, unsigned int const&, unsigned int const&, int const&, alog_noop const&) (log=..., fmt=..., [email protected]: 38113, xs#[email protected]: 6619904, xs#[email protected]: 3473955946, xs#[email protected]: -1, xs#3=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:504 #10 0x00000000004edbb0 in alog_format::FMTLogBuffer::printf_fmt<26, 36, 49, 59, 81, unsigned long, unsigned int, unsigned int, int, alog_noop>(alog_format::ALogFMTString<alog_format::seq<36, 49, 59, 81> >, unsigned long const&, unsigned int const&, unsigned int const&, int const&, alog_noop const&) (this=0x7f518de75f10, fmt=..., [email protected]: 38113, xs#[email protected]: 6619904, xs#[email protected]: 3473955946, xs#[email protected]: -1, xs#3=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:537 #11 0x00000000004ec2a7 in alog_format::next<true, 26>::printf_fmt<alog_format::ALogFMTString<alog_format::seq<36, 49, 59, 81> >, long, unsigned long, unsigned int, unsigned int, int, alog_noop>(alog_format::FMTLogBuffer&, alog_format::ALogFMTString<alog_format::seq<36, 49, 59, 81> >, long const&, unsigned long const&, unsigned int const&, unsigned int const&, int const&, alog_noop const&) (log=..., fmt=..., [email protected]: 0, xs#[email protected]: 38113, xs#[email protected]: 6619904, xs#[email protected]: 3473955946, xs#[email protected]: -1, xs#4=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:504 #12 0x00000000004ea0f9 in alog_format::FMTLogBuffer::printf_fmt<0, 25, 36, 49, 59, 81, long, unsigned long, unsigned int, unsigned int, int, alog_noop>(alog_format::ALogFMTString<alog_format::seq<25, 36, 49, 59, 81> >, long const&, unsigned long const&, unsigned int const&, unsigned int const&, int const&, alog_noop const&) (this=0x7f518de75f10, fmt=..., [email protected]: 0, xs#[email protected]: 38113, xs#[email protected]: 6619904, xs#[email protected]: 3473955946, xs#[email protected]: -1, xs#4=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:537 #13 0x00000000004e108f in __log__<alog_format::seq<25, 36, 49, 59, 81>, 80, long&, unsigned long const&, unsigned int, unsigned int&, int&, alog_noop>(int, ILogOutput *, co---Type <return> to continue, or q <return> to quit--- nst Prologue &, const char (&)[80], long &, const unsigned long &, <unknown type in /opt/overlaybd/bin/overlaybd-tcmu, CU 0x300276, DIE 0x332003>, unsigned int &, int &, <unknown type in /opt/overlaybd/bin/overlaybd-tcmu, CU 0x300276, DIE 0x332030>) (level=3, output= 0x874720 <default_log_output_file>, prolog=..., fmt=..., xs#[email protected]: 0, xs#[email protected]: 38113, xs#2=<unknown type in /opt/overlaybd/bin/overlaybd-tcmu, CU 0x300276, DIE 0x332003>, xs#[email protected]: 3473955946, xs#[email protected]: -1, xs#5=<unknown type in /opt/overlaybd/bin/overlaybd-tcmu, CU 0x300276, DIE 0x332030>) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:574 #14 0x00000000004e717a in ZFile::CompressionFile::pread(void*, unsigned long, long)::{lambda(ILogOutput*)#3}::operator()(ILogOutput*) const (__closure=0x7f518de97198, __output___LINE__=0x874720 <default_log_output_file>) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/zfile.cpp:426 #15 0x00000000004e8ac4 in LogBuilder<ZFile::CompressionFile::pread(void*, unsigned long, long)::{lambda(ILogOutput*)#3}>::~LogBuilder() (this=0x7f518de97190, __in_chrg=<optimized out>) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:596 #16 0x00000000004e76fa in ZFile::CompressionFile::pread(void*, unsigned long, long) (this=0x3ea6050, buf=0x7f518de98000, count=4096, offset=0) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/zfile.cpp:426 #17 0x00000000004562ce in FileSystem::SwitchFile::pread(void*, unsigned long, long) (this=0x3ea6110, buf=0x7f518de98000, count=4096, offset=0) at /rpmbuild/BUILD/overlaybd-0.4.1/src/switch_file.cpp:135 #18 0x00000000004b2662 in LSMT::verify_ht(FileSystem::IFile*, char*) (file=0x3ea6110, buf=0x7f518de98000 "") at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/lsmt/file.cpp:859 #19 0x00000000004b2aad in LSMT::do_load_index(LSMT::IFile*, LSMT::HeaderTrailer*, bool) (file=0x3ea6110, pheader_trailer=0x3eeffd8, trailer=true) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/lsmt/file.cpp:871 #20 0x00000000004b4753 in LSMT::do_parallel_load_index(void*) (param=0x7ffd46696460) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/lsmt/file.cpp:1086 #21 0x0000000000478c2f in photon::thread::go() (this=0x7f518de99800) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/photon/thread.cpp:100 #22 0x0000000000476ace in photon::thread_stub() () at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/photon/thread.cpp:255 #23 0x0000000000000000 in ()

    opened by wxx213 2
  • .clang-format is not enforced

    .clang-format is not enforced

    Though a clang-format configuration file is provided in the project, some source files and header files don't enforce the rule defined there. Any plan to format the source files?

    opened by changweige 2
  • Calculate CRC using Intel DSA

    Calculate CRC using Intel DSA

    Intel® DSA is a high-performance data copy and transformation accelerator that will be integrated into future Intel® processors, targeted for optimizing streaming data movement and transformation operations common with applications for high-performance storage, networking, persistent memory, and various data processing applications.

    Intel® DSA replaces the Intel® QuickData Technology, which is a part of Intel® I/O Acceleration Technology.

    The goal is to provide higher overall system performance for data mover and transformation operations while freeing up CPU cycles for higher-level functions. Intel® DSA enables high-performance data mover capability to/from volatile memory, persistent memory, memory-mapped I/O, and through a Non-Transparent Bridge (NTB) device to/from remote volatile and persistent memory on another node in a cluster. Enumeration and configuration are done with a PCI Express* compatible programming interface to the Operating System (OS) and can be controlled through a device driver.

    Besides the basic data mover operations, Intel® DSA supports a set of transformation operations on memory. For example:

    Generate and test CRC checksum, or Data Integrity Field (DIF) to support storage and networking applications. Memory Compare and delta generate/merge to support VM migration, VM Fast check-pointing, and software-managed memory deduplication usages.

    opened by hhb584520 2
  • Feat: add kmod support for DADI container image format

    Feat: add kmod support for DADI container image format

    What is the problem you're trying to solve Enabling kernel support for the layered container image format.

    Describe the solution you'd like The proposed container image file is used as backing store of a block device. By using customized mount tool, we can mount multiple layered files into one block device.

    enhancement 
    opened by zhuguoliang 2
  • fail to make on ubuntu 20.04

    fail to make on ubuntu 20.04

    On ubuntu 20.04.1, a lot "undefined reference" errors occurred during make when following the readme instructions.

    gcc version

    Using built-in specs.
    COLLECT_GCC=gcc
    COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper
    OFFLOAD_TARGET_NAMES=nvptx-none:hsa
    OFFLOAD_TARGET_DEFAULT=1
    Target: x86_64-linux-gnu
    Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
    Thread model: posix
    gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
    

    cmake version

    cmake version 3.16.3
    

    The log in detail:

    [ 10%] Built target Boost
    [ 20%] Built target RapidJSON
    [ 29%] Built target image_lib
    [ 36%] Built target photon_lib
    [ 45%] Built target base_lib
    [ 49%] Built target full_file_cache_lib
    [ 51%] Built target registryfs_lib
    [ 55%] Built target lsmt_lib
    [ 63%] Built target zfile_lib
    [ 67%] Built target cache_frontend_lib
    [ 69%] Built target cache_lib
    [ 81%] Built target fs_lib
    [ 83%] Built target net_lib
    [ 86%] Built target bs-overlaybd
    [ 87%] Linking CXX executable ../../output/overlaybd-zfile
    /usr/bin/ld: CMakeFiles/overlaybd-zfile.dir/overlaybd-zfile.cpp.o:(.data.rel.ro.local+0x0): undefined reference to `main::__func__'
    /usr/bin/ld: CMakeFiles/overlaybd-zfile.dir/overlaybd-zfile.cpp.o:(.data.rel.ro.local+0x20): undefined reference to `main::__func__'
    /usr/bin/ld: CMakeFiles/overlaybd-zfile.dir/overlaybd-zfile.cpp.o:(.data.rel.ro.local+0x40): undefined reference to `main::__func__'
    /usr/bin/ld: CMakeFiles/overlaybd-zfile.dir/overlaybd-zfile.cpp.o:(.data.rel.ro.local+0x60): undefined reference to `main::__func__'
    /usr/bin/ld: CMakeFiles/overlaybd-zfile.dir/overlaybd-zfile.cpp.o:(.data.rel.ro.local+0x80): undefined reference to `main::__func__'
    /usr/bin/ld: CMakeFiles/overlaybd-zfile.dir/overlaybd-zfile.cpp.o:(.data.rel.ro.local+0xa0): more undefined references to `main::__func__' follow
    /usr/bin/ld: ../../output/libbase_lib.a(alog.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `new_log_output_file(char const*, unsigned long, int, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libbase_lib.a(alog.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `log_output_file(char const*, unsigned long, int, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libbase_lib.a(iovector.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `iovector::push_front_more(unsigned long)::__func__'
    /usr/bin/ld: ../../output/libbase_lib.a(iovector.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `iovector::push_back_more(unsigned long)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor5preadEPvmlE6prolog[_ZZN10FileSystem18AlignedFileAdaptor5preadEPvmlE6prolog]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pread(void*, unsigned long, long)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor5preadEPvmlE6prolog_0[_ZZN10FileSystem18AlignedFileAdaptor5preadEPvmlE6prolog_0]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pread(void*, unsigned long, long)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor6pwriteEPKvmlE6prolog[_ZZN10FileSystem18AlignedFileAdaptor6pwriteEPKvmlE6prolog]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwrite(void const*, unsigned long, long)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor6pwriteEPKvmlE6prolog_0[_ZZN10FileSystem18AlignedFileAdaptor6pwriteEPKvmlE6prolog_0]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwrite(void const*, unsigned long, long)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor6pwriteEPKvmlE6prolog_1[_ZZN10FileSystem18AlignedFileAdaptor6pwriteEPKvmlE6prolog_1]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwrite(void const*, unsigned long, long)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor14preadv_mutableEP5iovecilE6prolog[_ZZN10FileSystem18AlignedFileAdaptor14preadv_mutableEP5iovecilE6prolog]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::preadv_mutable(iovec*, int, long)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor14preadv_mutableEP5iovecilE6prolog_0[_ZZN10FileSystem18AlignedFileAdaptor14preadv_mutableEP5iovecilE6prolog_0]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::preadv_mutable(iovec*, int, long)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog[_ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwritev_mutable(iovec*, int, long)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_0[_ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_0]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwritev_mutable(iovec*, int, long)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_1[_ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_1]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwritev_mutable(iovec*, int, long)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_2[_ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_2]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwritev_mutable(iovec*, int, long)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_3[_ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_3]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwritev_mutable(iovec*, int, long)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `FileSystem::new_aligned_file_adaptor(FileSystem::IFile*, unsigned int, bool, bool, IOAlloc*)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `FileSystem::new_aligned_file_adaptor(FileSystem::IFile*, unsigned int, bool, bool, IOAlloc*)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `FileSystem::new_aligned_fs_adaptor(FileSystem::IFileSystem*, unsigned int, bool, bool, IOAlloc*)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `exportfs_init::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `exportfs_init::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `exportfs_fini::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIllEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog[_ZZN10FileSystem10ExportBase11do_callbackIllEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<long, long>(unsigned int, long, Delegate<int, AsyncResult<long>*>)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIllEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0[_ZZN10FileSystem10ExportBase11do_callbackIllEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<long, long>(unsigned int, long, Delegate<int, AsyncResult<long>*>)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIiiEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog[_ZZN10FileSystem10ExportBase11do_callbackIiiEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<int, int>(unsigned int, int, Delegate<int, AsyncResult<int>*>)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIiiEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0[_ZZN10FileSystem10ExportBase11do_callbackIiiEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<int, int>(unsigned int, int, Delegate<int, AsyncResult<int>*>)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIP6direntS3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog[_ZZN10FileSystem10ExportBase11do_callbackIP6direntS3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<dirent*, dirent*>(unsigned int, dirent*, Delegate<int, AsyncResult<dirent*>*>)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIP6direntS3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0[_ZZN10FileSystem10ExportBase11do_callbackIP6direntS3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<dirent*, dirent*>(unsigned int, dirent*, Delegate<int, AsyncResult<dirent*>*>)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIviEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog[_ZZN10FileSystem10ExportBase11do_callbackIviEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<void, int>(unsigned int, int, Delegate<int, AsyncResult<void>*>)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIviEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0[_ZZN10FileSystem10ExportBase11do_callbackIviEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<void, int>(unsigned int, int, Delegate<int, AsyncResult<void>*>)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIPNS_10IAsyncFileES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog[_ZZN10FileSystem10ExportBase11do_callbackIPNS_10IAsyncFileES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<FileSystem::IAsyncFile*, FileSystem::IAsyncFile*>(unsigned int, FileSystem::IAsyncFile*, Delegate<int, AsyncResult<FileSystem::IAsyncFile*>*>)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIPNS_10IAsyncFileES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0[_ZZN10FileSystem10ExportBase11do_callbackIPNS_10IAsyncFileES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<FileSystem::IAsyncFile*, FileSystem::IAsyncFile*>(unsigned int, FileSystem::IAsyncFile*, Delegate<int, AsyncResult<FileSystem::IAsyncFile*>*>)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIPNS_8AsyncDIRES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog[_ZZN10FileSystem10ExportBase11do_callbackIPNS_8AsyncDIRES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<FileSystem::AsyncDIR*, FileSystem::AsyncDIR*>(unsigned int, FileSystem::AsyncDIR*, Delegate<int, AsyncResult<FileSystem::AsyncDIR*>*>)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIPNS_8AsyncDIRES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0[_ZZN10FileSystem10ExportBase11do_callbackIPNS_8AsyncDIRES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<FileSystem::AsyncDIR*, FileSystem::AsyncDIR*>(unsigned int, FileSystem::AsyncDIR*, Delegate<int, AsyncResult<FileSystem::AsyncDIR*>*>)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(localfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem22LocalFileSystemAdaptorC4EiE6prolog[_ZZN10FileSystem22LocalFileSystemAdaptorC4EiE6prolog]+0x0): undefined reference to `FileSystem::LocalFileSystemAdaptor::LocalFileSystemAdaptor(int)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(localfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem22LocalFileSystemAdaptor14new_local_fileEiE6prolog[_ZZN10FileSystem22LocalFileSystemAdaptor14new_local_fileEiE6prolog]+0x0): undefined reference to `FileSystem::LocalFileSystemAdaptor::new_local_file(int)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(localfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem22LocalFileSystemAdaptor4openEPKciE6prolog[_ZZN10FileSystem22LocalFileSystemAdaptor4openEPKciE6prolog]+0x0): undefined reference to `FileSystem::LocalFileSystemAdaptor::open(char const*, int)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(localfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem22LocalFileSystemAdaptor4openEPKcijE6prolog[_ZZN10FileSystem22LocalFileSystemAdaptor4openEPKcijE6prolog]+0x0): undefined reference to `FileSystem::LocalFileSystemAdaptor::open(char const*, int, unsigned int)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(localfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem22LocalFileSystemAdaptor5creatEPKcjE6prolog[_ZZN10FileSystem22LocalFileSystemAdaptor5creatEPKcjE6prolog]+0x0): undefined reference to `FileSystem::LocalFileSystemAdaptor::creat(char const*, unsigned int)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(localfs.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `new_localfile_adaptor::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(localfs.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `open_localfile_adaptor::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(path.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `FileSystem::Walker::enter_dir()::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(path.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `FileSystem::Walker::is_dir(dirent*)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(subfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem13SubFileSystem4initEPNS_11IFileSystemEPKcbE6prolog[_ZZN10FileSystem13SubFileSystem4initEPNS_11IFileSystemEPKcbE6prolog]+0x0): undefined reference to `FileSystem::SubFileSystem::init(FileSystem::IFileSystem*, char const*, bool)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(subfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem13SubFileSystem4initEPNS_11IFileSystemEPKcbE6prolog_0[_ZZN10FileSystem13SubFileSystem4initEPNS_11IFileSystemEPKcbE6prolog_0]+0x0): undefined reference to `FileSystem::SubFileSystem::init(FileSystem::IFileSystem*, char const*, bool)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(subfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem13SubFileSystem7PathCatC4EPKS0_RPKcE6prolog[_ZZN10FileSystem13SubFileSystem7PathCatC4EPKS0_RPKcE6prolog]+0x0): undefined reference to `FileSystem::SubFileSystem::PathCat::PathCat(FileSystem::SubFileSystem const*, char const*&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(subfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem13SubFileSystem7PathCatC4EPKS0_RPKcE6prolog_0[_ZZN10FileSystem13SubFileSystem7PathCatC4EPKS0_RPKcE6prolog_0]+0x0): undefined reference to `FileSystem::SubFileSystem::PathCat::PathCat(FileSystem::SubFileSystem const*, char const*&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x60): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x80): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0xa0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0xc0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0xe0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x100): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x120): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x140): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x160): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x180): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x1a0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x1c0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x1e0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x200): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x220): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x240): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x260): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x280): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x2a0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x2c0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x2e0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#2} const&)::__func__'
    /usr/bin/ld: ../../output/libfs_lib.a(virtual-file.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `FileSystem::VirtualFile::piov_nocopy(long (FileSystem::IFile::*)(void*, unsigned long, long), iovec const*, int, long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(thread-pool.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `photon::ThreadPoolBase::join(photon::TPControl*)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(thread.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `photon::thread_yield_to(photon::thread*)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(thread.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `photon::thread_interrupt(photon::thread*, int)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(thread.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `photon::thread_join(photon::join_handle*)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(thread.cpp.o):(.data.rel.ro.local+0x60): undefined reference to `photon::thread_shutdown(photon::thread*, bool)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(thread.cpp.o):(.data.rel.ro.local+0x80): undefined reference to `photon::mutex::lock(unsigned long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(thread.cpp.o):(.data.rel.ro.local+0xa0): undefined reference to `photon::rwlock::lock(int, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local._ZZN6photon8libaiocb15submit_and_waitEmE6prolog[_ZZN6photon8libaiocb15submit_and_waitEmE6prolog]+0x0): undefined reference to `photon::libaiocb::submit_and_wait(unsigned long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local._ZZN6photon8libaiocb15submit_and_waitEmE6prolog_0[_ZZN6photon8libaiocb15submit_and_waitEmE6prolog_0]+0x0): undefined reference to `photon::libaiocb::submit_and_wait(unsigned long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local._ZZN6photon8libaiocb15submit_and_waitEmE6prolog_1[_ZZN6photon8libaiocb15submit_and_waitEmE6prolog_1]+0x0): undefined reference to `photon::libaiocb::submit_and_wait(unsigned long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local._ZZN6photon8libaiocb15submit_and_waitEmE6prolog_2[_ZZN6photon8libaiocb15submit_and_waitEmE6prolog_2]+0x0): undefined reference to `photon::libaiocb::submit_and_wait(unsigned long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `photon::resume_libaio_requesters()::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `photon::posixaio::preadv(int, iovec const*, int, long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `photon::posixaio::pwritev(int, iovec const*, int, long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0x60): undefined reference to `libaio_wrapper_init::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0x80): undefined reference to `libaio_wrapper_init::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0xa0): undefined reference to `libaio_wrapper_init::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0xc0): undefined reference to `libaio_wrapper_fini::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0xe0): undefined reference to `photon::have_n_try<photon::resume_libaio_requesters()::{lambda()#1}>(photon::resume_libaio_requesters()::{lambda()#1} const&, char const*, long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0x100): undefined reference to `photon::have_n_try<photon::wait_for_events()::{lambda()#1}>(photon::wait_for_events()::{lambda()#1} const&, char const*, long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0x120): undefined reference to `photon::have_n_try<photon::wait_for_events()::{lambda()#2}>(photon::wait_for_events()::{lambda()#2} const&, char const*, long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local._ZZN6photon10have_n_tryIZNS_8libaiocb6cancelEvEUlvE_EElRKT_PKclE6prolog[_ZZN6photon10have_n_tryIZNS_8libaiocb6cancelEvEUlvE_EElRKT_PKclE6prolog]+0x0): undefined reference to `photon::have_n_try<photon::libaiocb::cancel()::{lambda()#1}>(photon::libaiocb::cancel()::{lambda()#1} const&, char const*, long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local._ZZN6photon11posix_aiocb13async_performIPFiP5aiocbEJEEElT_DpT0_E6prolog[_ZZN6photon11posix_aiocb13async_performIPFiP5aiocbEJEEElT_DpT0_E6prolog]+0x0): undefined reference to `photon::posix_aiocb::async_perform<int (*)(aiocb*)>(int (*)(aiocb*))::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local._ZZN6photon11posix_aiocb13async_performIPFiiP5aiocbEJiEEElT_DpT0_E6prolog[_ZZN6photon11posix_aiocb13async_performIPFiiP5aiocbEJiEEElT_DpT0_E6prolog]+0x0): undefined reference to `photon::posix_aiocb::async_perform<int (*)(int, aiocb*), int>(int (*)(int, aiocb*), int)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon5EPoll4initEvE6prolog[_ZZN6photon5EPoll4initEvE6prolog]+0x0): undefined reference to `photon::EPoll::init()::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon5EPoll4initEvE6prolog_0[_ZZN6photon5EPoll4initEvE6prolog_0]+0x0): undefined reference to `photon::EPoll::init()::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon5EPoll3ctlEiijPviiE6prolog[_ZZN6photon5EPoll3ctlEiijPviiE6prolog]+0x0): undefined reference to `photon::EPoll::ctl(int, int, unsigned int, void*, int, int)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon5EPoll18do_wait_for_eventsEmE6prolog[_ZZN6photon5EPoll18do_wait_for_eventsEmE6prolog]+0x0): undefined reference to `photon::EPoll::do_wait_for_events(unsigned long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon5EPoll18do_wait_for_eventsEmE6prolog_0[_ZZN6photon5EPoll18do_wait_for_eventsEmE6prolog_0]+0x0): undefined reference to `photon::EPoll::do_wait_for_events(unsigned long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon5EPoll15wait_for_eventsEijmE6prolog[_ZZN6photon5EPoll15wait_for_eventsEijmE6prolog]+0x0): undefined reference to `photon::EPoll::wait_for_events(int, unsigned int, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon5EPoll4waitEP11epoll_eventiiE6prolog[_ZZN6photon5EPoll4waitEP11epoll_eventiiE6prolog]+0x0): undefined reference to `photon::EPoll::wait(epoll_event*, int, int)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon11MasterEPoll4initEvE6prolog[_ZZN6photon11MasterEPoll4initEvE6prolog]+0x0): undefined reference to `photon::MasterEPoll::init()::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon11MasterEPoll4initEvE6prolog_0[_ZZN6photon11MasterEPoll4initEvE6prolog_0]+0x0): undefined reference to `photon::MasterEPoll::init()::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon11MasterEPoll14wait_for_eventEmimE6prolog[_ZZN6photon11MasterEPoll14wait_for_eventEmimE6prolog]+0x0): undefined reference to `photon::MasterEPoll::wait_for_event(unsigned long, int, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon11MasterEPoll14wait_for_eventEmimE6prolog_0[_ZZN6photon11MasterEPoll14wait_for_eventEmimE6prolog_0]+0x0): undefined reference to `photon::MasterEPoll::wait_for_event(unsigned long, int, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon11MasterEPoll21safe_thread_interruptEPNS_6threadEiiE6prolog[_ZZN6photon11MasterEPoll21safe_thread_interruptEPNS_6threadEiiE6prolog]+0x0): undefined reference to `photon::MasterEPoll::safe_thread_interrupt(photon::thread*, int, int)::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `fd_events_epoll_init::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `fd_events_epoll_fini::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `new_fd_poller::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local+0x60): undefined reference to `new_fd_poller::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local+0x80): undefined reference to `wait_for_fds::__func__'
    /usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local+0xa0): undefined reference to `wait_for_fds::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local._ZZN10FileSystem7TarFile5lseekEliE6prolog[_ZZN10FileSystem7TarFile5lseekEliE6prolog]+0x0): undefined reference to `FileSystem::TarFile::lseek(long, int)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local._ZZN10FileSystem7TarFile5closeEvE6prolog[_ZZN10FileSystem7TarFile5closeEvE6prolog]+0x0): undefined reference to `FileSystem::TarFile::close()::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog[_ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog]+0x0): undefined reference to `FileSystem::TarZfileFs::open_tar_zfile(FileSystem::IFile*, char const*)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog_0[_ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog_0]+0x0): undefined reference to `FileSystem::TarZfileFs::open_tar_zfile(FileSystem::IFile*, char const*)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog_1[_ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog_1]+0x0): undefined reference to `FileSystem::TarZfileFs::open_tar_zfile(FileSystem::IFile*, char const*)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog_2[_ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog_2]+0x0): undefined reference to `FileSystem::TarZfileFs::open_tar_zfile(FileSystem::IFile*, char const*)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `is_tar_file::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `is_tar_file::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `is_tar_file::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local+0x60): undefined reference to `is_tar_file::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile9JumpTable5buildEPKjmlE6prolog[_ZZN5ZFile15CompressionFile9JumpTable5buildEPKjmlE6prolog]+0x0): undefined reference to `ZFile::CompressionFile::JumpTable::build(unsigned int const*, unsigned long, long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile5fstatEP4statE6prolog[_ZZN5ZFile15CompressionFile5fstatEP4statE6prolog]+0x0): undefined reference to `ZFile::CompressionFile::fstat(stat*)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile11BlockReaderC4EPKS0_mmE6prolog[_ZZN5ZFile15CompressionFile11BlockReaderC4EPKS0_mmE6prolog]+0x0): undefined reference to `ZFile::CompressionFile::BlockReader::BlockReader(ZFile::CompressionFile const*, unsigned long, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile11BlockReader11read_blocksEmmE6prolog[_ZZN5ZFile15CompressionFile11BlockReader11read_blocksEmmE6prolog]+0x0): undefined reference to `ZFile::CompressionFile::BlockReader::read_blocks(unsigned long, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile11BlockReader11read_blocksEmmE6prolog_0[_ZZN5ZFile15CompressionFile11BlockReader11read_blocksEmmE6prolog_0]+0x0): undefined reference to `ZFile::CompressionFile::BlockReader::read_blocks(unsigned long, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZNK5ZFile15CompressionFile11BlockReader10crc32_codeEvE6prolog[_ZZNK5ZFile15CompressionFile11BlockReader10crc32_codeEvE6prolog]+0x0): undefined reference to `ZFile::CompressionFile::BlockReader::crc32_code() const::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZNK5ZFile15CompressionFile11BlockReader10crc32_codeEvE6prolog_0[_ZZNK5ZFile15CompressionFile11BlockReader10crc32_codeEvE6prolog_0]+0x0): undefined reference to `ZFile::CompressionFile::BlockReader::crc32_code() const::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile11BlockReader8iterator17get_current_blockEvE6prolog[_ZZN5ZFile15CompressionFile11BlockReader8iterator17get_current_blockEvE6prolog]+0x0): undefined reference to `ZFile::CompressionFile::BlockReader::iterator::get_current_block()::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile5preadEPvmlE6prolog[_ZZN5ZFile15CompressionFile5preadEPvmlE6prolog]+0x0): undefined reference to `ZFile::CompressionFile::pread(void*, unsigned long, long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_0[_ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_0]+0x0): undefined reference to `ZFile::CompressionFile::pread(void*, unsigned long, long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_1[_ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_1]+0x0): undefined reference to `ZFile::CompressionFile::pread(void*, unsigned long, long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_2[_ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_2]+0x0): undefined reference to `ZFile::CompressionFile::pread(void*, unsigned long, long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_3[_ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_3]+0x0): undefined reference to `ZFile::CompressionFile::pread(void*, unsigned long, long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `ZFile::load_jump_table(FileSystem::IFile*, ZFile::CompressionFile::HeaderTrailer*, ZFile::CompressionFile::JumpTable&, bool)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `ZFile::load_jump_table(FileSystem::IFile*, ZFile::CompressionFile::HeaderTrailer*, ZFile::CompressionFile::JumpTable&, bool)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `ZFile::load_jump_table(FileSystem::IFile*, ZFile::CompressionFile::HeaderTrailer*, ZFile::CompressionFile::JumpTable&, bool)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x60): undefined reference to `ZFile::load_jump_table(FileSystem::IFile*, ZFile::CompressionFile::HeaderTrailer*, ZFile::CompressionFile::JumpTable&, bool)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x80): undefined reference to `ZFile::load_jump_table(FileSystem::IFile*, ZFile::CompressionFile::HeaderTrailer*, ZFile::CompressionFile::JumpTable&, bool)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0xa0): more undefined references to `ZFile::load_jump_table(FileSystem::IFile*, ZFile::CompressionFile::HeaderTrailer*, ZFile::CompressionFile::JumpTable&, bool)::__func__' follow
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x120): undefined reference to `zfile_open_ro::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x140): undefined reference to `zfile_open_ro::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x160): undefined reference to `zfile_open_ro::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x180): undefined reference to `ZFile::write_header_trailer(FileSystem::IFile*, bool, bool, bool, ZFile::CompressionFile::HeaderTrailer*)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x1a0): undefined reference to `zfile_compress::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x1c0): undefined reference to `zfile_compress::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x1e0): undefined reference to `zfile_compress::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x200): undefined reference to `zfile_compress::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x220): undefined reference to `zfile_compress::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x240): more undefined references to `zfile_compress::__func__' follow
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x380): undefined reference to `zfile_decompress::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x3a0): undefined reference to `zfile_decompress::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x3c0): undefined reference to `zfile_decompress::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x3e0): undefined reference to `is_zfile::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x400): undefined reference to `is_zfile::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x420): undefined reference to `is_zfile::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz44initEPKNS_12CompressArgsEE6prolog[_ZZN5ZFile14Compressor_lz44initEPKNS_12CompressArgsEE6prolog]+0x0): undefined reference to `ZFile::Compressor_lz4::init(ZFile::CompressArgs const*)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz44initEPKNS_12CompressArgsEE6prolog_0[_ZZN5ZFile14Compressor_lz44initEPKNS_12CompressArgsEE6prolog_0]+0x0): undefined reference to `ZFile::Compressor_lz4::init(ZFile::CompressArgs const*)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz48compressEPKhmPhmE6prolog[_ZZN5ZFile14Compressor_lz48compressEPKhmPhmE6prolog]+0x0): undefined reference to `ZFile::Compressor_lz4::compress(unsigned char const*, unsigned long, unsigned char*, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz48compressEPKhmPhmE6prolog_0[_ZZN5ZFile14Compressor_lz48compressEPKhmPhmE6prolog_0]+0x0): undefined reference to `ZFile::Compressor_lz4::compress(unsigned char const*, unsigned long, unsigned char*, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz48compressEPKhmPhmE6prolog_1[_ZZN5ZFile14Compressor_lz48compressEPKhmPhmE6prolog_1]+0x0): undefined reference to `ZFile::Compressor_lz4::compress(unsigned char const*, unsigned long, unsigned char*, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog[_ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog]+0x0): undefined reference to `ZFile::Compressor_lz4::decompress(unsigned char const*, unsigned long, unsigned char*, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog_0[_ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog_0]+0x0): undefined reference to `ZFile::Compressor_lz4::decompress(unsigned char const*, unsigned long, unsigned char*, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog_1[_ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog_1]+0x0): undefined reference to `ZFile::Compressor_lz4::decompress(unsigned char const*, unsigned long, unsigned char*, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog_2[_ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog_2]+0x0): undefined reference to `ZFile::Compressor_lz4::decompress(unsigned char const*, unsigned long, unsigned char*, unsigned long)::__func__'
    /usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `create_compressor::__func__'
    collect2: error: ld returned 1 exit status
    make[2]: *** [src/tools/CMakeFiles/overlaybd-zfile.dir/build.make:93: output/overlaybd-zfile] Error 1
    make[1]: *** [CMakeFiles/Makefile2:760: src/tools/CMakeFiles/overlaybd-zfile.dir/all] Error 2
    make: *** [Makefile:152: all] Error 2
    
    bug 
    opened by zylan29 2
  • how to support windows containers

    how to support windows containers

    I think there are severval aspects to consider for Windows containers:

    1. porting overlaybd
    • Windows container in Linux host: overlaybd should work out-of-box, by passing through the virtual block device (generated by TCMU in host) to guest; and it's also possible to integrate overlaybd into hypervisor, avoiding the virtual block device in host kernel.

    • Windows container in Windows host: the userspace code of overlaybd can be easily ported to Windows with the help of WSL, cygwin or mingw; but I'm not sure whether WSL have the support for TCMU virtual block device;

    1. snapshotter / graphdriver
    • I believe that windows containers use a different snapshotter / graphdriver than overlay2 in linux, so we have to port overlaybd's driver to windows; as project teleport is also a remote image, which should be a good fit for reference.
    1. building image
    • should work as exepected, as long as using overlaybd's native writable layer;

    • does buildkit have support for windows images?

    1. running container
    • should work as exepected, as long as snapshotter / graphdriver is properly implemented

    ​ Any comments?

    opened by lihuiba 1
  • Help with build errors

    Help with build errors

    I'm developing on ARM64, and I run into these errors, I was wondering if I could get some help with.

    c++: error: unrecognized command-line option ‘-mcrc32’
    c++: error: unrecognized command-line option ‘-msse4.2’
    c++: error: unrecognized command-line option ‘-mcrc32’
    c++: error: unrecognized command-line option ‘-mcrc32’
    c++: error: unrecognized command-line option ‘-mcrc32’
    

    Full log

    ❯ make -j                                                                   build -> main
    Scanning dependencies of target photon_obj
    [  1%] Building CXX object src/overlaybd/cache/ocf_cache/CMakeFiles/ocf_env_lib.dir/ease_bindings/env/ocf_env.cpp.o
    [  1%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/checksum/crc32c.cpp.o
    [  2%] Building CXX object src/overlaybd/cache/ocf_cache/CMakeFiles/ocf_env_lib.dir/ease_bindings/env/utils_mpool.cpp.o
    [  3%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/alog.cpp.o
    [  3%] Building CXX object src/overlaybd/zfile/CMakeFiles/crc32_lib.dir/crc32/crc32c.cpp.o
    [  4%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/estring.cpp.o
    [  4%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/event-loop.cpp.o
    [  4%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/identity-pool.cpp.o
    [  5%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/executor/executor.cpp.o
    [  5%] Building CXX object src/overlaybd/registryfs/CMakeFiles/registryfs_lib.dir/registryfs.cpp.o
    [  6%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/iovector.cpp.o
    [  6%] Building C object _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/setup.c.o
    [  7%] Building C object _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/syscall.c.o
    c++: error: unrecognized command-line option ‘-mcrc32’
    c++: error: unrecognized command-line option ‘-msse4.2’
    c++: error: unrecognized command-line option ‘-mcrc32’
    c++: error: unrecognized command-line option ‘-mcrc32’
    c++: error: unrecognized command-line option ‘-mcrc32’
    [  7%] Building CXX object _deps/photon-build/third_party/CMakeFiles/easy_weak.dir/easy_weak/easy_weak.cpp.o
    c++: error: unrecognized command-line option ‘-msse4.2’
    c++: error: unrecognized command-line option ‘-msse4.2’
    [  8%] Building C object _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/queue.c.o
    [  8%] Building C object _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/register.c.o
    c++: error: unrecognized command-line option ‘-msse4.2’
    cc: error: unrecognized command-line option ‘-mcrc32’
    c++: error: unrecognized command-line option ‘-msse4.2’
    [  9%] Building CXX object src/overlaybd/cache/frontend/CMakeFiles/cache_frontend_lib.dir/cached_file.cpp.o
    cc: error: unrecognized command-line option ‘-msse4.2’
    c++: error: unrecognized command-line option ‘-mcrc32’
    c++: error: unrecognized command-line option ‘-mcrc32’
    make[2]: *** [src/overlaybd/zfile/CMakeFiles/crc32_lib.dir/build.make:76: src/overlaybd/zfile/CMakeFiles/crc32_lib.dir/crc32/crc32c.cpp.o] Error 1
    make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:76: _deps/photon-build/CMakeFiles/photon_obj.dir/common/alog.cpp.o] Error 1
    make[2]: *** Waiting for unfinished jobs....
    make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:104: _deps/photon-build/CMakeFiles/photon_obj.dir/common/estring.cpp.o] Error 1
    make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:118: _deps/photon-build/CMakeFiles/photon_obj.dir/common/event-loop.cpp.o] Error 1
    make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:132: _deps/photon-build/CMakeFiles/photon_obj.dir/common/executor/executor.cpp.o] Error 1
    c++: error: unrecognized command-line option ‘-msse4.2’
    [  9%] Generating ../output/ext4_64
    make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:90: _deps/photon-build/CMakeFiles/photon_obj.dir/common/checksum/crc32c.cpp.o] Error 1
    make[1]: *** [CMakeFiles/Makefile2:666: src/overlaybd/zfile/CMakeFiles/crc32_lib.dir/all] Error 2
    make[1]: *** Waiting for unfinished jobs....
    c++: error: unrecognized command-line option ‘-mcrc32’
    [  9%] Building CXX object src/overlaybd/lsmt/CMakeFiles/lsmt_lib.dir/index.cpp.o
    [  9%] Building CXX object src/overlaybd/cache/frontend/CMakeFiles/cache_frontend_lib.dir/cached_fs.cpp.o
    c++: error: unrecognized command-line option ‘-msse4.2’
    make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:160: _deps/photon-build/CMakeFiles/photon_obj.dir/common/iovector.cpp.o] Error 1
    cc: error: unrecognized command-line option ‘-mcrc32’
    cc: error: unrecognized command-line option ‘-msse4.2’
    [ 10%] Building CXX object src/overlaybd/lsmt/CMakeFiles/lsmt_lib.dir/file.cpp.o
    [ 10%] Building CXX object src/overlaybd/cache/full_file_cache/CMakeFiles/full_file_cache_lib.dir/cache_pool.cpp.o
    c++: error: unrecognized command-line option ‘-mcrc32’
    c++: error: unrecognized command-line option ‘-msse4.2’
    make[2]: *** [_deps/photon-build/third_party/CMakeFiles/easy_weak.dir/build.make:76: _deps/photon-build/third_party/CMakeFiles/easy_weak.dir/easy_weak/easy_weak.cpp.o] Error 1
    make[1]: *** [CMakeFiles/Makefile2:454: _deps/photon-build/third_party/CMakeFiles/easy_weak.dir/all] Error 2
    cc: error: unrecognized command-line option ‘-mcrc32’
    c++: error: unrecognized command-line option ‘-mcrc32’
    [ 11%] Building CXX object src/overlaybd/cache/full_file_cache/CMakeFiles/full_file_cache_lib.dir/cache_store.cpp.o
    cc: error: unrecognized command-line option ‘-msse4.2’
    c++: error: unrecognized command-line option ‘-msse4.2’
    make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:146: _deps/photon-build/CMakeFiles/photon_obj.dir/common/identity-pool.cpp.o] Error 1
    make[1]: *** [CMakeFiles/Makefile2:372: _deps/photon-build/CMakeFiles/photon_obj.dir/all] Error 2
    make[2]: *** [_deps/photon-build/CMakeFiles/uring.dir/build.make:76: _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/setup.c.o] Error 1
    make[2]: *** Waiting for unfinished jobs....
    make[2]: *** [_deps/photon-build/CMakeFiles/uring.dir/build.make:118: _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/syscall.c.o] Error 1
    make[2]: *** [_deps/photon-build/CMakeFiles/uring.dir/build.make:90: _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/queue.c.o] Error 1
    ext4_64
    cc: error: unrecognized command-line option ‘-mcrc32’
    cc: error: unrecognized command-line option ‘-msse4.2’
    make[2]: *** [_deps/photon-build/CMakeFiles/uring.dir/build.make:104: _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/register.c.o] Error 1
    make[1]: *** [CMakeFiles/Makefile2:346: _deps/photon-build/CMakeFiles/uring.dir/all] Error 2
    [ 11%] Built target baselayer
    [ 11%] Linking CXX static library ../../../../output/libocf_env_lib.a
    [ 11%] Built target ocf_env_lib
    [ 11%] Linking CXX static library ../../../../output/libfull_file_cache_lib.a
    [ 11%] Built target full_file_cache_lib
    [ 12%] Linking CXX static library ../../../../output/libcache_frontend_lib.a
    [ 12%] Built target cache_frontend_lib
    [ 13%] Linking CXX static library ../../../output/libregistryfs_lib.a
    [ 13%] Built target registryfs_lib
    [ 14%] Linking CXX static library ../../../output/liblsmt_lib.a
    [ 14%] Built target lsmt_lib
    make: *** [Makefile:156: all] Error 2
    2 ❯ sudo make install                                                       build -> main
    [sudo] password for juliusl: 
    [  0%] Building C object _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/setup.c.o
    cc: error: unrecognized command-line option ‘-mcrc32’
    cc: error: unrecognized command-line option ‘-msse4.2’
    make[2]: *** [_deps/photon-build/CMakeFiles/uring.dir/build.make:76: _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/setup.c.o] Error 1
    make[1]: *** [CMakeFiles/Makefile2:346: _deps/photon-build/CMakeFiles/uring.dir/all] Error 2
    make: *** [Makefile:156: all] Error 2
    
    opened by juliusl 5
  • How to clear the local layer cache

    How to clear the local layer cache

    How to clear the local layer cache ? Can I delete the cached files in the ’registryCacheDir‘ directory directly? Is the relevant information stored in the memory?

    opened by bengbeng-pp 10
Owner
Alibaba
Alibaba Open Source
Alibaba
docker-nginx-with-image-filter

docker-nginx-with-image-filter 因为官方镜像默认没有启用该模块,故自己做了一个Dockerfile,并编译,docker镜像地址: docker pull smally84/nginx-with-image-filter:1.20.1 附上Dockerfile ###

null 2 Dec 11, 2021
Un petit client/serveur TCP pour transférer d'image en C

MIMAGE Project Guide de démarage Prérequis Être sur un environement Linux et avoir le compilateur GCC et makefile d'installé. Installation Pour build

MrSolarius 4 Dec 21, 2021
A Linux reference software for building the Demo Core-Image on Renesas RZ/V2M Evaluation Kit

Introduction This repository is a Linux reference software for building the Demo Core-Image on Renesas RZ/V2M Evaluation Kit . You have to get the pro

Lexra Chang 3 Jan 20, 2022
Boost.GIL - Generic Image Library | Requires C++11 since Boost 1.68

Documentation GitHub Actions AppVeyor Azure Pipelines CircleCI Regression Codecov Boost.GIL Introduction Documentation Requirements Branches Community

Boost.org 146 Jul 11, 2022
A easy-to-use image processing library accelerated with CUDA on GPU.

gpucv Have you used OpenCV on your CPU, and wanted to run it on GPU. Did you try installing OpenCV and get frustrated with its installation. Fret not

shrikumaran pb 4 Aug 14, 2021
Isaac ROS image_pipeline package for hardware-accelerated image processing in ROS2.

isaac_ros_image_pipeline Overview This metapackage offers similar functionality as the standard, CPU-based image_pipeline metapackage, but does so by

NVIDIA AI IOT 31 Jul 18, 2022
OpenCL based GPU accelerated SPH fluid simulation library

libclsph An OpenCL based GPU accelerated SPH fluid simulation library Can I see it in action? Demo #1 Demo #2 Why? Libclsph was created to explore the

null 47 Jul 27, 2022
GPU Accelerated C++ User Interface, with WYSIWYG developing tools, XML supports, built-in data binding and MVVM features.

GacUI GPU Accelerated C++ User Interface, with WYSIWYG developing tools, XML supports, built-in data binding and MVVM features. Read the LICENSE first

Vczh Libraries 2.1k Aug 8, 2022
Artistic creativity, accelerated with SIMD.

Link the YouTube video demonstration: https://www.youtube.com/watch?v=Bjwml32dxhU The compression algorithm does not work well on this colorful video,

Long Nguyen 17 Mar 16, 2022
YOLOv4 accelerated wtih TensorRT and multi-stream input using Deepstream

Deepstream 5.1 YOLOv4 App This Deepstream application showcases YOLOv4 running at high FPS throughput! P.S - Click the gif to watch the entire video!

Akash James 34 Jul 28, 2022
Cross-platform version of Heboris C7EX using a hardware-accelerated SDL 2.0 renderer

Heboris C7EX - unofficial version (YGS2K EX) This version contains the source code for Heboris C7EX. It requires a C compiler, SDL 2.0, SDL 2.0 mixer,

Brandon McGriff 9 May 27, 2022
ROS2 packages based on NVIDIA libArgus library for hardware-accelerated CSI camera support.

Isaac ROS Argus Camera This repository provides monocular and stereo nodes that enable ROS developers to use cameras connected to Jetson platforms ove

NVIDIA Isaac ROS 28 Jul 20, 2022
CUDA-accelerated Apriltag detection and pose estimation.

Isaac ROS Apriltag Overview This ROS2 node uses the NVIDIA GPU-accelerated AprilTags library to detect AprilTags in images and publishes their poses,

NVIDIA Isaac ROS 40 Aug 3, 2022
Hardware-accelerated DNN model inference ROS2 packages using NVIDIA Triton/TensorRT for both Jetson and x86_64 with CUDA-capable GPU.

Isaac ROS DNN Inference Overview This repository provides two NVIDIA GPU-accelerated ROS2 nodes that perform deep learning inference using custom mode

NVIDIA Isaac ROS 42 Jul 18, 2022
Visual odometry package based on hardware-accelerated NVIDIA Elbrus library with world class quality and performance.

Isaac ROS Visual Odometry This repository provides a ROS2 package that estimates stereo visual inertial odometry using the Isaac Elbrus GPU-accelerate

NVIDIA Isaac ROS 181 Aug 11, 2022
Apache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing

Apache Arrow Powering In-Memory Analytics Apache Arrow is a development platform for in-memory analytics. It contains a set of technologies that enabl

The Apache Software Foundation 10k Aug 7, 2022
HugeCTR is a GPU-accelerated recommender framework designed to distribute training across multiple GPUs and nodes and estimate Click-Through Rates (CTRs)

Merlin: HugeCTR HugeCTR is a GPU-accelerated recommender framework designed to distribute training across multiple GPUs and nodes and estimate Click-T

null 686 Aug 8, 2022
A CUDA-accelerated cloth simulation engine based on Extended Position Based Dynamics (XPBD).

Velvet Velvet is a CUDA-accelerated cloth simulation engine based on Extended Position Based Dynamics (XPBD). Why another cloth simulator? There are a

Vital Chen 28 Aug 7, 2022
PoC black/white image sequence to dumpy gif image sequence converter

PoC black/white image sequence to dumpy gif image sequence converter

null 64 Jul 28, 2022
The “Quite OK Image” format for fast, lossless image compression

The “Quite OK Image” format for fast, lossless image compression

Dominic Szablewski 5.7k Aug 6, 2022
A header-only library for C++(0x) that allows automagic pretty-printing of any container.

cxx-prettyprint =============== A pretty printing library for C++ containers. Synopsis: Simply by including this header-only library in your sourc

Louis Delacroix 531 Jul 30, 2022
🦘 A dependency injection container for C++11, C++14 and later

kangaru ?? Kangaru is an inversion of control container for C++11, C++14 and later. It provides many features to automate dependency injection and red

Guillaume Racicot 357 Aug 5, 2022
Library of generic and type safe containers in pure C language (C99 or C11) for a wide collection of container (comparable to the C++ STL).

M*LIB: Generic type-safe Container Library for C language Overview M*LIB (M star lib) is a C library enabling to use generic and type safe container i

PpHd 505 Aug 7, 2022
A C++20 concepts library, providing container concepts etc.

More concepts #include <more_concepts/more_concepts.hpp> This library aims to provide general purpose concepts that are not available in the C++20 con

Michal Jankovič 50 Jul 15, 2022
A C++11 or library for parsing and serializing JSON to and from a DOM container in memory.

Branch master develop Azure Docs Drone Matrix Fuzzing --- Appveyor codecov.io Boost.JSON Overview Boost.JSON is a portable C++ library which provides

Boost.org 297 Jul 15, 2022
A C++ data container replicating std::queue functionality but with better performance.

A data container replicating std::queue functionality but with better performance than standard library containers in a queue context. C++98/03/11/14/etc-compatible.

Matt Bentley 22 May 14, 2022
this package help you to give glassomorphic+ neomrphic both effects to a container (at a time).

duomorphsim this package help you to give glassomorphic+ neomrphic both effects to a container (at a time). Usage DuoMorphicCard need four argument wh

Lokesh Jangid 3 Aug 23, 2021