In the next bugfix release (4.0.4) we'll also include static libraries of TurboActivate and TurboFloat built with libc++.
I've downloaded and taken a crack at the Mac static library build of TA. It seems that you build your .a file against the gcc compiler. Apple is generally not adding modern C++ features to the gcc compiler, as they are now mostly using clang -- most of the primary developers for clang now work at Apple.
I would suggest either compiling and linking against the modern llvm libc++ implementation on Apple or linking with both gnu libstdc as well as llvm libc++ and releasing both static libs for TurboActivate. In general, no new code is being developed on gcc at Apple, and I would be surprised if anyone complained.
Enclosed are the beginning of the cavalcade of errors that occur when you attempt to link TurboActivate.a into an Apple project using clang.
jwb
---- snipUndefined symbols for architecture x86_64: "__gnu_cxx::__exchange_and_add(int volatile*, int)", referenced from: l1006 in libTurboActivate.a(error_code.o) l1007 in libTurboActivate.a(error_code.o) "std::string::find_last_not_of(char const*, unsigned long) const", referenced from: TrimStr(std::string const&) in libTurboActivate.a(Trial.o) "std::string::find_first_not_of(char const*, unsigned long) const", referenced from: TrimStr(std::string const&) in libTurboActivate.a(Trial.o) "std::string::find(char, unsigned long) const", referenced from: int boost::io::detail::upper_bound_from_fstring<std::string, std::ctype<char> >(std::string const&, std::string::value_type, std::ctype<char> const&, unsigned char) in libTurboActivate.a(Activation.o) boost::basic_format<char, std::char_traits<char>, std::allocator<char> >::parse(std::string const&) in libTurboActivate.a(Activation.o) "std::string::substr(unsigned long, unsigned long) const", referenced from: Activation::IsKeyValid(char*, int) in libTurboActivate.a(Activation.PKey.o) Trial::IsOnlineTrialKeyValid(char const*) in libTurboActivate.a(Trial.o) TrimStr(std::string const&) in libTurboActivate.a(Trial.o) "std::string::compare(std::string const&) const", referenced from: __gnu_cxx::hashtable<std::pair<std::string const, FeatureValue>, std::string, __gnu_cxx::hash<std::string>, std::_Select1st<std::pair<std::string const, FeatureValue> >, std::equal_to<std::string>, std::allocator<FeatureValue> >::find(std::string const&) in libTurboActivate.a(TurboActivate.o) __gnu_cxx::hashtable<std::pair<std::string const, unsigned int>, std::string, __gnu_cxx::hash<std::string>, std::_Select1st<std::pair<std::string const, unsigned int> >, std::equal_to<std::string>, std::allocator<unsigned int> >::insert_unique_noresize(std::pair<std::string const, unsigned int> const&) in libTurboActivate.a(TurboActivate.o) __gnu_cxx::hashtable<std::pair<std::string const, unsigned int>, std::string, __gnu_cxx::hash<std::string>, std::_Select1st<std::pair<std::string const, unsigned int> >, std::equal_to<std::string>, std::allocator<unsigned int> >::find(std::string const&) in libTurboActivate.a(TurboActivate.o) __gnu_cxx::hashtable<std::pair<std::string const, FeatureValue>, std::string, __gnu_cxx::hash<std::string>, std::_Select1st<std::pair<std::string const, FeatureValue> >, std::equal_to<std::string>, std::allocator<FeatureValue> >::insert_unique_noresize(std::pair<std::string const, FeatureValue> const&) in libTurboActivate.a(Activation.o) CryptoPP::AuthenticatedDecryptionFilter::ChannelPut2(std::string const&, unsigned char const*, unsigned long, int, bool) in libTurboActivate.a(filters.o) CryptoPP::AuthenticatedDecryptionFilter::ChannelCreatePutSpace(std::string const&, unsigned long&) in libTurboActivate.a(filters.o) CryptoPP::AuthenticatedEncryptionFilter::ChannelPut2(std::string const&, unsigned char const*, unsigned long, int, bool) in libTurboActivate.a(filters.o) ... "std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const", referenced from: Activation::GetActivationBlock(std::string&, int, bool, bool, char const*) in libTurboActivate.a(Activation.o) Activation::VerifyAppendGenuineBlock(std::string const&, char const*, char const*, bool, unsigned long long) in libTurboActivate.a(Activation.o) Activation::VerifySaveActivation(std::string const&, char const*, char const*, char const*, bool, unsigned long long) in libTurboActivate.a(Activation.o) Trial::GetTrackBlock(std::string&, int, bool, char const*, unsigned long long, unsigned long long) in libTurboActivate.a(Trial.o) Trial::VerifySaveVTrial(std::string const&, char const*, char const*, bool, unsigned long long) in libTurboActivate.a(Trial.o) TrialExtension::Write(std::ostream&, unsigned char) in libTurboActivate.a(TrialExtension.o) "std::basic_ios<char, std::char_traits<char> >::widen(char) const", referenced from: boost::io::detail::stream_format_state<char, std::char_traits<char> >::apply_on(std::basic_ios<char, std::char_traits<char> >&, std::locale*) const in libTurboActivate.a(Activation.o) void boost::io::detail::put<char, std::char_traits<char>, std::allocator<char>, boost::io::detail::put_holder<char, std::char_traits<char> > const&>(boost::io::detail::put_holder<char, std::char_traits<char> > const&, boost::io::detail::format_item<char, std::char_traits<char>, std::allocator<char> > const&, boost::basic_format<char, std::char_traits<char>, std::allocator<char> >::string_type&, boost::basic_format<char, std::char_traits<char>, std::allocator<char> >::internal_streambuf_t&, std::locale*) in libTurboActivate.a(Activation.o) "std::istream::get()", referenced from: Activation::ReadToFlagInCombinedAblock(std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >&, unsigned char, unsigned char, bool) in libTurboActivate.a(Activation.o) Activation::GetExtraData(int&) in libTurboActivate.a(Activation.o) Activation::WasOfflineActivation() in libTurboActivate.a(Activation.o) Activation::IsActivated(int&, bool&) in libTurboActivate.a(Activation.o) Activation::GetFeatureMap(__gnu_cxx::hash_map<std::string, FeatureValue, __gnu_cxx::hash<std::string>, std::equal_to<std::string>, std::allocator<FeatureValue> >*, long&) in libTurboActivate.a(Activation.o) ActivationData::LoadProductKey() in libTurboActivate.a(ActivationData.o) ActivationData::Load() in libTurboActivate.a(ActivationData.o) ...
In the next bugfix release (4.0.4) we'll also include static libraries of TurboActivate and TurboFloat built with libc++.
Hi,
Can you inform me about the status of this issue?Is it implemented in v4.0.4 because there is no reference in the corresponding release notes?
We haven't compiled TA/TF with the newer C++ library. We hadn't had time to do it yet (it's more than a simple recompile).
Ok, I understand that it's not so simple.
At the moment, we are trying to develop an application compatible with OSX 10.8 - OSX 10.12.This application depends on other libraries as well and there is a limitation to the compiler and the way of linking.As a result, we have to select the static linking with TA.
To be more specific the project setup is the following:- Xcode 6.2, Apple LLVM 6.0- Base SDK: 10.10, Deployment target: 10.8- C++ Language Dialect: c++11- C++ Standard Library: LLVM libc++- Added references to Frameworks and libraries ( https://wyday.com/limelm/help/using-turboactivate-on-mac-os-x/#static-lib)- Added libstdc++.6.dylib (https://wyday.com/forum/t/2916/mac-static-linking-error/#post-14376). I think that this breaks the OSX 10.8 compatibility.
Can you propose a solution to our problem?
In the latest version 4.0.8 the static libraries on Linux are fixed. Are you going to release a bugfix for MAC static libraries?
TurboActivate 4.0.9 and TurboFloat 4.0.9 are now out and include builds for both libstdc++ and libc++. Thanks for your patience, this took a bit of work to get done.