rsocket / rsocket-cpp

C++ implementation of RSocket
http://rsocket.io
Apache License 2.0
253 stars 99 forks source link

Error when make -j #894

Open xiongxiongjiang opened 5 years ago

xiongxiongjiang commented 5 years ago

When exexute make -j:

Undefined symbols for architecture x86_64:
  "folly::f14::detail::F14LinkCheck<(folly::f14::detail::F14IntrinsicsMode)1>::check()", referenced from:
      folly::f14::detail::F14Table<folly::f14::detail::NodeContainerPolicy<folly::dynamic, folly::dynamic, folly::detail::DynamicHasher, folly::detail::DynamicKeyEqual, void> >::rehashImpl(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)::'lambda'()::operator()() const in ColdResumeManager.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [tests] Error 1
make[1]: *** [CMakeFiles/tests.dir/all] Error 2
1 warning generated.
[100%] Linking CXX executable yarpl-tests
[100%] Built target yarpl-tests
make: *** [all] Error 2
robertroeser commented 5 years ago

Does this fix your issue or is it something else? https://github.com/rsocket/rsocket-cpp/pull/888

xiongxiongjiang commented 5 years ago

I tried, didn't work.

gf59ru commented 5 years ago

Has same bug. Fix from #888 doesn't help.

timotheecour commented 4 years ago

same error; this seems related to https://github.com/facebook/folly/issues/1027 here are the relevant code snippets from folly sources:

template <>
struct F14LinkCheck<getF14IntrinsicsMode()> {
  // The purpose of this method is to trigger a link failure if
  // compilation flags vary across compilation units.  The definition
  // is in F14Table.cpp, so only one of F14LinkCheck<None>::check,
  // F14LinkCheck<Simd>::check, or F14LinkCheck<SimdAndCrc>::check will
  // be available at link time.
  //
  // To cause a link failure the function must be invoked in code that
  // is not optimized away, so we call it on a couple of cold paths
  // (exception handling paths in copy construction and rehash).  LTO may
  // remove it entirely, but that's fine.
  static void check() noexcept;
};
// If you get a link failure that leads you here, your build has varying
// compiler flags across compilation units in a way that would break F14.
// SIMD (SSE2 or NEON) needs to be either on everywhere or off everywhere
// that uses F14.  If SIMD is on then hardware CRC needs to be enabled
// everywhere or disabled everywhere.
void F14LinkCheck<getF14IntrinsicsMode()>::check() noexcept {}
iychche commented 3 years ago

Is there a solution for this issue? I am new to C++ and I am trying to build this on Mac. Here is the error:

Undefined symbols for architecture x86_64:
  "folly::f14::detail::F14LinkCheck<(folly::f14::detail::F14IntrinsicsMode)1>::check()", referenced from:
      folly::f14::detail::F14Table<folly::f14::detail::NodeContainerPolicy<folly::dynamic, folly::dynamic, folly::detail::DynamicHasher, folly::detail::DynamicKeyEqual, void> >::rehashImpl(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)::'lambda'()::operator()() const in libreactivesocket_examples_util.a(ColdResumeManager.cpp.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [example_cold-resumption-client] Error 1
make[1]: *** [CMakeFiles/example_cold-resumption-client.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
Undefined symbols for architecture x86_64:
  "folly::f14::detail::F14LinkCheck<(folly::f14::detail::F14IntrinsicsMode)1>::check()", referenced from:
      folly::f14::detail::F14Table<folly::f14::detail::NodeContainerPolicy<folly::dynamic, folly::dynamic, folly::detail::DynamicHasher, folly::detail::DynamicKeyEqual, void> >::rehashImpl(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)::'lambda'()::operator()() const in ColdResumeManager.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [tests] Error 1
make[1]: *** [CMakeFiles/tests.dir/all] Error 2
make: *** [all] Error 2