Skip to content
This repository was archived by the owner on Mar 22, 2023. It is now read-only.
This repository was archived by the owner on Mar 22, 2023. It is now read-only.

redefinitions in ebr.hpp #1247

Open
Open
@lukaszstolarczuk

Description

@lukaszstolarczuk

As seen e.g. in pmemkv (1.4+) build:

/usr/bin/ld: CMakeFiles/pmemkv.dir/src/engines-experimental/radix.cc.o: in function `pmem::detail::ebr::ebr()':
/usr/include/libpmemobj++/detail/ebr.hpp:121: multiple definition of `pmem::detail::ebr::ebr()'; CMakeFiles/pmemkv.dir/src/engine.cc.o:/usr/include/libpmemobj++/detail/ebr.hpp:121: first defined here
/usr/bin/ld: CMakeFiles/pmemkv.dir/src/engines-experimental/radix.cc.o: in function `pmem::detail::ebr::ebr()':
/usr/include/libpmemobj++/detail/ebr.hpp:121: multiple definition of `pmem::detail::ebr::ebr()'; CMakeFiles/pmemkv.dir/src/engine.cc.o:/usr/include/libpmemobj++/detail/ebr.hpp:121: first defined here
/usr/bin/ld: CMakeFiles/pmemkv.dir/src/engines-experimental/radix.cc.o: in function `pmem::detail::ebr::register_worker()':
/usr/include/libpmemobj++/detail/ebr.hpp:141: multiple definition of `pmem::detail::ebr::register_worker()'; CMakeFiles/pmemkv.dir/src/engine.cc.o:/usr/include/libpmemobj++/detail/ebr.hpp:141: first defined here
/usr/bin/ld: CMakeFiles/pmemkv.dir/src/engines-experimental/radix.cc.o: in function `pmem::detail::ebr::worker::worker(pmem::detail::ebr*, std::reference_wrapper<std::atomic<unsigned long> >)':
/usr/include/libpmemobj++/detail/ebr.hpp:239: multiple definition of `pmem::detail::ebr::worker::worker(pmem::detail::ebr*, std::reference_wrapper<std::atomic<unsigned long> >)'; CMakeFiles/pmemkv.dir/src/engine.cc.o:/usr/include/libpmemobj++/detail/ebr.hpp:239: first defined here
/usr/bin/ld: CMakeFiles/pmemkv.dir/src/engines-experimental/radix.cc.o: in function `pmem::detail::ebr::sync()':
/usr/include/libpmemobj++/detail/ebr.hpp:166: multiple definition of `pmem::detail::ebr::sync()'; CMakeFiles/pmemkv.dir/src/engine.cc.o:/usr/include/libpmemobj++/detail/ebr.hpp:166: first defined here
/usr/bin/ld: CMakeFiles/pmemkv.dir/src/engines-experimental/radix.cc.o: in function `pmem::detail::ebr::full_sync()':
/usr/include/libpmemobj++/detail/ebr.hpp:196: multiple definition of `pmem::detail::ebr::full_sync()'; CMakeFiles/pmemkv.dir/src/engine.cc.o:/usr/include/libpmemobj++/detail/ebr.hpp:196: first defined here
/usr/bin/ld: CMakeFiles/pmemkv.dir/src/engines-experimental/radix.cc.o: in function `pmem::detail::ebr::staging_epoch()':
/usr/include/libpmemobj++/detail/ebr.hpp:215: multiple definition of `pmem::detail::ebr::staging_epoch()'; CMakeFiles/pmemkv.dir/src/engine.cc.o:/usr/include/libpmemobj++/detail/ebr.hpp:215: first defined here
/usr/bin/ld: CMakeFiles/pmemkv.dir/src/engines-experimental/radix.cc.o: in function `pmem::detail::ebr::gc_epoch()':
/usr/include/libpmemobj++/detail/ebr.hpp:232: multiple definition of `pmem::detail::ebr::gc_epoch()'; CMakeFiles/pmemkv.dir/src/engine.cc.o:/usr/include/libpmemobj++/detail/ebr.hpp:232: first defined here
/usr/bin/ld: CMakeFiles/pmemkv.dir/src/engines-experimental/radix.cc.o: in function `pmem::detail::ebr::worker::worker(pmem::detail::ebr*, std::reference_wrapper<std::atomic<unsigned long> >)':
/usr/include/libpmemobj++/detail/ebr.hpp:239: multiple definition of `pmem::detail::ebr::worker::worker(pmem::detail::ebr*, std::reference_wrapper<std::atomic<unsigned long> >)'; CMakeFiles/pmemkv.dir/src/engine.cc.o:/usr/include/libpmemobj++/detail/ebr.hpp:239: first defined here
/usr/bin/ld: CMakeFiles/pmemkv.dir/src/engines-experimental/radix.cc.o: in function `pmem::detail::ebr::worker::~worker()':
/usr/include/libpmemobj++/detail/ebr.hpp:250: multiple definition of `pmem::detail::ebr::worker::~worker()'; CMakeFiles/pmemkv.dir/src/engine.cc.o:/usr/include/libpmemobj++/detail/ebr.hpp:250: first defined here
/usr/bin/ld: CMakeFiles/pmemkv.dir/src/engines-experimental/radix.cc.o: in function `pmem::detail::ebr::worker::~worker()':
/usr/include/libpmemobj++/detail/ebr.hpp:250: multiple definition of `pmem::detail::ebr::worker::~worker()'; CMakeFiles/pmemkv.dir/src/engine.cc.o:/usr/include/libpmemobj++/detail/ebr.hpp:250: first defined here
collect2: error: ld returned 1 exit status

// copy-pasted from https://github.com/lukaszstolarczuk/pmemkv/runs/5831415476?check_suite_focus=true

it's most likely the fault of missing static inline for all (public?) classes/functions (as seen in the log above) in ebr.hpp

It should be fixed in the latest branch containing this code.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type: BugSomething isn't workingradix_treeNeeds to be resolved to productize radix_tree

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions