kpu / kenlm

KenLM: Faster and Smaller Language Model Queries
http://kheafield.com/code/kenlm/
Other
2.5k stars 513 forks source link

Build error on mac osx #112

Closed jonashartwig closed 6 years ago

jonashartwig commented 6 years ago

Hi,

I can bild shared libs on linux but not mac os x. I downloaded the source from here: https://kheafield.com/code/kenlm.tar.gz I configure with cmake like this: cmake -DBUILD_SHARED_LIBS=ON /src/kenlm and then build using make. The error output is like this:

[ 67%] Linking CXX shared library ../../lib/libkenlm_builder.dylib Undefined symbols for architecture x86_64: "lm::ModelBuffer::Sink(util::stream::Chains&, std::1::vector<unsigned long long, std::1::allocator > const&)", referenced from: lm::builder::Output::SinkProbs(util::stream::Chains&) in output.cc.o "lm::ModelBuffer::Source(util::stream::Chains&)", referenced from: lm::builder::Output::SinkProbs(util::stream::Chains&) in output.cc.o "lm::ModelBuffer::ModelBuffer(StringPiece, bool, bool)", referenced from: lm::builder::Output::Output(StringPiece, bool, bool) in output.cc.o lm::builder::Output::Output(StringPiece, bool, bool) in output.cc.o "lm::VocabLoadException::VocabLoadException()", referenced from: lm::ngram::GrowableVocab::FindOrInsert(StringPiece const&) in corpus_count.cc.o "lm::VocabLoadException::~VocabLoadException()", referenced from: lm::ngram::GrowableVocab::FindOrInsert(StringPiece const&) in corpus_count.cc.o "lm::FormatLoadException::FormatLoadException()", referenced from: lm::builder::(anonymous namespace)::ComplainDisallowed(StringPiece, lm::WarningAction&) in corpus_count.cc.o lm::builder::Interpolate::Run(util::stream::ChainPositions const&) in interpolate.cc.o "lm::FormatLoadException::~FormatLoadException()", referenced from: lm::builder::(anonymous namespace)::ComplainDisallowed(StringPiece, lm::WarningAction&) in corpus_count.cc.o lm::builder::Interpolate::Run(util::stream::ChainPositions const&) in interpolate.cc.o "lm::ngram::SortedVocabulary::ComputeRenumbering(unsigned int, int, int, std::1::vector<unsigned int, std::1::allocator >&)", referenced from: lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o "lm::ngram::detail::HashForVocab(char const, unsigned long)", referenced from: void lm::builder::CorpusCount::RunWithVocab<lm::ngram::GrowableVocab >(util::stream::ChainPosition const&, lm::ngram::GrowableVocab&) in corpus_count.cc.o "lm::ngram::ShowSizes(std::1::vector<unsigned long long, std::1::allocator > const&)", referenced from: lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o "lm::Renumber::Run(util::stream::ChainPosition const&)", referenced from: boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > >::operator()() in pipeline.cc.o "lm::PrintARPA::Run(util::stream::ChainPositions const&)", referenced from: boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > >::operator()() in output.cc.o "util::DupOrThrow(int)", referenced from: lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o "util::ErsatzPRead(int, void, unsigned long, unsigned long long)", referenced from: util::stream::MergingReader<lm::SuffixOrder, lm::builder::CombineCounts>::ReadSingle(unsigned long long, unsigned long long, util::stream::ChainPosition const&) in pipeline.cc.o util::stream::MergeQueue::Push(void, unsigned long long, unsigned long long) in pipeline.cc.o util::stream::MergeQueue::Pop() in pipeline.cc.o util::stream::MergingReader<lm::ContextOrder, util::stream::NeverCombine>::ReadSingle(unsigned long long, unsigned long long, util::stream::ChainPosition const&) in pipeline.cc.o util::stream::MergeQueue::Push(void, unsigned long long, unsigned long long) in pipeline.cc.o util::stream::MergeQueue::Pop() in pipeline.cc.o util::stream::MergingReader<lm::SuffixOrder, util::stream::NeverCombine>::ReadSingle(unsigned long long, unsigned long long, util::stream::ChainPosition const&) in pipeline.cc.o ... "util::HugeRealloc(unsigned long, bool, util::scoped_memory&)", referenced from: lm::ngram::GrowableVocab::FindOrInsert(StringPiece const&) in corpus_count.cc.o "util::ReadOrThrow(int, void, unsigned long)", referenced from: util::stream::BlockSorter::Run(util::stream::ChainPosition const&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Merge(unsigned long) in pipeline.cc.o util::stream::MergingReader<lm::SuffixOrder, lm::builder::CombineCounts>::Run(util::stream::ChainPosition const&, bool) in pipeline.cc.o util::stream::BlockSorter::Run(util::stream::ChainPosition const&) in pipeline.cc.o util::stream::Sort<lm::ContextOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o util::stream::MergingReader<lm::ContextOrder, util::stream::NeverCombine>::Run(util::stream::ChainPosition const&, bool) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o ... "util::SeekOrThrow(int, unsigned long long)", referenced from: lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::SuffixOrder const&, lm::builder::CombineCounts const&) in pipeline.cc.o util::stream::BlockSorter::Run(util::stream::ChainPosition const&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::ContextOrder, util::stream::NeverCombine>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::ContextOrder const&, util::stream::NeverCombine const&) in pipeline.cc.o util::stream::BlockSorter::Run(util::stream::ChainPosition const&) in pipeline.cc.o util::stream::Sort<lm::ContextOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o ... "util::SizeOrThrow(int)", referenced from: lm::builder::CorpusCount::Run(util::stream::ChainPosition const&) in corpus_count.cc.o lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Output(util::stream::Chain&, unsigned long) in pipeline.cc.o util::stream::Sort<lm::ContextOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, util::stream::NeverCombine>::Output(util::stream::Chain&, unsigned long) in pipeline.cc.o ... "util::WriteOrThrow(int, void const, unsigned long)", referenced from: lm::builder::CorpusCount::Run(util::stream::ChainPosition const&) in corpus_count.cc.o lm::ngram::GrowableVocab::GrowableVocab(unsigned int, int const&) in corpus_count.cc.o lm::ngram::WriteUniqueWords::operator()(StringPiece const&) in corpus_count.cc.o lm::builder::PrintHook::Sink(lm::builder::HeaderInfo const&, int, util::stream::Chains&) in output.cc.o util::stream::BlockSorter::Run(util::stream::ChainPosition const&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Merge(unsigned long) in pipeline.cc.o util::stream::MergingReader<lm::SuffixOrder, lm::builder::CombineCounts>::Run(util::stream::ChainPosition const&, bool) in pipeline.cc.o ... "util::MallocOrThrow(unsigned long)", referenced from: lm::builder::CorpusCount::CorpusCount(util::FilePiece&, int, bool, unsigned long long&, unsigned int&, std::1::vector<bool, std::1::allocator >&, std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&, unsigned long, lm::WarningAction) in corpus_count.cc.o lm::builder::CorpusCount::CorpusCount(util::FilePiece&, int, bool, unsigned long long&, unsigned int&, std::1::vector<bool, std::1::allocator >&, std::1::basic_string<char, std::__1::char_traits, std::1::allocator > const&, unsigned long, lm::WarningAction) in corpus_count.cc.o lm::ngram::GrowableVocab::GrowableVocab(unsigned int, int const&) in corpus_count.cc.o lm::builder::PrintHook::Sink(lm::builder::HeaderInfo const&, int, util::stream::Chains&) in output.cc.o util::stream::MergingReader<lm::SuffixOrder, lm::builder::CombineCounts>::Run(util::stream::ChainPosition const&, bool) in pipeline.cc.o util::stream::MergingReader<lm::ContextOrder, util::stream::NeverCombine>::Run(util::stream::ChainPosition const&, bool) in pipeline.cc.o util::stream::MergingReader<lm::SuffixOrder, util::stream::NeverCombine>::Run(util::stream::ChainPosition const&, bool) in pipeline.cc.o ... "util::MurmurHash64A(void const, unsigned long, unsigned long long)", referenced from: lm::builder::CorpusCount::Run(util::stream::ChainPosition const&) in corpus_count.cc.o "util::ResizeOrThrow(int, unsigned long long)", referenced from: util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::SuffixOrder const&, lm::builder::CombineCounts const&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::ContextOrder, util::stream::NeverCombine>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::ContextOrder const&, util::stream::NeverCombine const&) in pipeline.cc.o util::stream::Sort<lm::ContextOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, util::stream::NeverCombine>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::SuffixOrder const&, util::stream::NeverCombine const&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o "util::scoped_memory::reset(void, unsigned long, util::scoped_memory::Alloc)", referenced from: lm::builder::CorpusCount::Run(util::stream::ChainPosition const&) in corpus_count.cc.o lm::ngram::GrowableVocab::GrowableVocab(unsigned int, int const&) in corpus_count.cc.o util::AutoProbing<lm::ngram::ProbingVocabularyEntry, util::IdentityHash, std::1::equal_to >::AutoProbing(unsigned long, unsigned long long const&, util::IdentityHash const&, std::__1::equal_to const&) in corpus_count.cc.o util::FilePiece::~FilePiece() in corpus_count.cc.o util::FilePiece::~FilePiece() in pipeline.cc.o "util::scoped_memory::scoped_memory(unsigned long, bool)", referenced from: util::AutoProbing<lm::ngram::ProbingVocabularyEntry, util::IdentityHash, std::1::equal_to >::AutoProbing(unsigned long, unsigned long long const&, util::IdentityHash const&, std::1::equal_to const&) in corpus_count.cc.o "util::ErsatzProgress::~ErsatzProgress()", referenced from: util::FilePiece::~FilePiece() in corpus_count.cc.o util::FilePiece::~FilePiece() in pipeline.cc.o "util::MurmurHashNative(void const, unsigned long, unsigned long long)", referenced from: lm::ngram::GrowableVocab::FindOrInsert(StringPiece const&) in corpus_count.cc.o lm::builder::(anonymous namespace)::Writer::Append(unsigned int) in corpus_count.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::AddRight> > > >::run() in initial_probabilities.cc.o lm::builder::Interpolate::Run(util::stream::ChainPositions const&) in interpolate.cc.o "util::Pool::More(unsigned long)", referenced from: void std::1::insertion_sort_3<util::SizedCompare<lm::SuffixOrder, util::SizedProxy>&, util::ProxyIterator >(util::ProxyIterator, util::ProxyIterator, util::SizedCompare<lm::SuffixOrder, util::SizedProxy>&) in pipeline.cc.o bool std::1::insertion_sort_incomplete<util::SizedCompare<lm::SuffixOrder, util::SizedProxy>&, util::ProxyIterator >(util::ProxyIterator, util::ProxyIterator, util::SizedCompare<lm::SuffixOrder, util::SizedProxy>&) in pipeline.cc.o void std::1::insertion_sort_3<util::SizedCompare<lm::ContextOrder, util::SizedProxy>&, util::ProxyIterator >(util::ProxyIterator, util::ProxyIterator, util::SizedCompare<lm::ContextOrder, util::SizedProxy>&) in pipeline.cc.o bool std::1::insertion_sort_incomplete<util::SizedCompare<lm::ContextOrder, util::SizedProxy>&, util::ProxyIterator >(util::ProxyIterator, util::ProxyIterator, util::SizedCompare<lm::ContextOrder, util::SizedProxy>&) in pipeline.cc.o "util::Pool::Pool()", referenced from: void util::SizedSort(void, void, unsigned long, lm::SuffixOrder const&) in pipeline.cc.o void util::SizedSort(void, void, unsigned long, lm::ContextOrder const&) in pipeline.cc.o "util::Pool::~Pool()", referenced from: void util::SizedSort(void, void, unsigned long, lm::SuffixOrder const&) in pipeline.cc.o void util::SizedSort(void, void, unsigned long, lm::ContextOrder const&) in pipeline.cc.o "util::stream::MultiProgress::Activate()", referenced from: lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o "util::stream::MultiProgress::SetTarget(unsigned long long)", referenced from: lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Output(util::stream::Chain&, unsigned long) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, util::stream::NeverCombine>::Output(util::stream::Chain&, unsigned long) in pipeline.cc.o "util::stream::Link::Init(util::stream::ChainPosition const&)", referenced from: util::stream::Stream::Stream(util::stream::ChainPosition const&) in adjust_counts.cc.o util::stream::Stream::Stream(util::stream::ChainPosition const&) in initial_probabilities.cc.o util::stream::Stream::Stream(util::stream::ChainPosition const&) in interpolate.cc.o util::stream::Stream::Stream(util::stream::ChainPosition const&) in pipeline.cc.o "util::stream::Link::Poison()", referenced from: lm::builder::AdjustCounts::Run(util::stream::ChainPositions const&) in adjust_counts.cc.o lm::builder::(anonymous namespace)::Writer::~Writer() in corpus_count.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::AddRight> > > >::run() in initial_probabilities.cc.o util::stream::MergingReader<lm::SuffixOrder, lm::builder::CombineCounts>::Run(util::stream::ChainPosition const&, bool) in pipeline.cc.o util::stream::MergingReader<lm::SuffixOrder, lm::builder::CombineCounts>::ReadSingle(unsigned long long, unsigned long long, util::stream::ChainPosition const&) in pipeline.cc.o util::stream::MergingReader<lm::ContextOrder, util::stream::NeverCombine>::Run(util::stream::ChainPosition const&, bool) in pipeline.cc.o util::stream::MergingReader<lm::ContextOrder, util::stream::NeverCombine>::ReadSingle(unsigned long long, unsigned long long, util::stream::ChainPosition const&) in pipeline.cc.o ... "util::stream::Link::Link(util::stream::ChainPosition const&)", referenced from: lm::builder::AdjustCounts::Run(util::stream::ChainPositions const&) in adjust_counts.cc.o lm::builder::(anonymous namespace)::Writer::Writer(unsigned long, util::stream::ChainPosition const&, void, unsigned long) in corpus_count.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::MergeRight> > > >::run() in initial_probabilities.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::OnlyGamma> > > >::run() in initial_probabilities.cc.o util::stream::BlockSorter::Run(util::stream::ChainPosition const&) in pipeline.cc.o util::stream::MergingReader<lm::SuffixOrder, lm::builder::CombineCounts>::Run(util::stream::ChainPosition const&, bool) in pipeline.cc.o util::stream::MergingReader<lm::SuffixOrder, lm::builder::CombineCounts>::ReadSingle(unsigned long long, unsigned long long, util::stream::ChainPosition const&) in pipeline.cc.o ... "util::stream::Link::Link()", referenced from: util::stream::Stream::Stream(util::stream::ChainPosition const&) in adjust_counts.cc.o util::stream::Stream::Stream(util::stream::ChainPosition const&) in initial_probabilities.cc.o lm::builder::Interpolate::Run(util::stream::ChainPositions const&) in interpolate.cc.o util::stream::Stream::Stream(util::stream::ChainPosition const&) in interpolate.cc.o util::stream::Stream::Stream(util::stream::ChainPosition const&) in pipeline.cc.o "util::stream::Link::~Link()", referenced from: lm::builder::AdjustCounts::Run(util::stream::ChainPositions const&) in adjust_counts.cc.o util::stream::Stream::Stream(util::stream::ChainPosition const&) in adjust_counts.cc.o lm::builder::(anonymous namespace)::Writer::Writer(unsigned long, util::stream::ChainPosition const&, void, unsigned long) in corpus_count.cc.o lm::builder::(anonymous namespace)::Writer::~Writer() in corpus_count.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::AddRight> > > >::run() in initial_probabilities.cc.o util::stream::Stream::Stream(util::stream::ChainPosition const&) in initial_probabilities.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::MergeRight> > > >::run() in initial_probabilities.cc.o ... "util::stream::Link::operator++()", referenced from: lm::builder::AdjustCounts::Run(util::stream::ChainPositions const&) in adjust_counts.cc.o lm::builder::(anonymous namespace)::CollapseStream::StartBlock() in adjust_counts.cc.o util::stream::Stream::Stream(util::stream::ChainPosition const&) in adjust_counts.cc.o lm::builder::(anonymous namespace)::Writer::Writer(unsigned long, util::stream::ChainPosition const&, void, unsigned long) in corpus_count.cc.o lm::builder::(anonymous namespace)::Writer::Append(unsigned int) in corpus_count.cc.o lm::builder::(anonymous namespace)::Writer::~Writer() in corpus_count.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::AddRight> > > >::run() in initial_probabilities.cc.o ... "util::stream::Chain::Add()", referenced from: lm::builder::InitialProbabilities(lm::builder::InitialProbabilitiesConfig const&, std::1::vector<lm::builder::Discount, std::1::allocator > const&, util::stream::Chains&, util::stream::Chains&, util::stream::Chains&, std::1::vector<unsigned long long, std::1::allocator > const&, bool, lm::SpecialVocab const&) in initial_probabilities.cc.o util::stream::Chains::CheckForRun<lm::PrintARPA, &(lm::PrintARPA::Run)>::type& util::stream::Chains::operator>>(lm::PrintARPA const&) in output.cc.o lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::SuffixOrder const&, lm::builder::CombineCounts const&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Output(util::stream::Chain&, unsigned long) in pipeline.cc.o util::stream::Sort<lm::ContextOrder, util::stream::NeverCombine>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::ContextOrder const&, util::stream::NeverCombine const&) in pipeline.cc.o ... "util::stream::Chain::Wait(bool)", referenced from: lm::builder::Output::SinkProbs(util::stream::Chains&) in output.cc.o lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::ContextOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o "util::stream::Chain::Complete()", referenced from: lm::builder::InitialProbabilities(lm::builder::InitialProbabilitiesConfig const&, std::1::vector<lm::builder::Discount, std::1::allocator > const&, util::stream::Chains&, util::stream::Chains&, util::stream::Chains&, std::1::vector<unsigned long long, std::1::allocator > const&, bool, lm::SpecialVocab const&) in initial_probabilities.cc.o util::stream::Chains::operator>>(util::stream::Recycler const&) in output.cc.o util::stream::Chain::operator>>(util::stream::Recycler const&) in pipeline.cc.o "util::stream::Chain::Chain(util::stream::ChainConfig const&)", referenced from: lm::builder::InitialProbabilities(lm::builder::InitialProbabilitiesConfig const&, std::1::vector<lm::builder::Discount, std::1::allocator > const&, util::stream::Chains&, util::stream::Chains&, util::stream::Chains&, std::1::vector<unsigned long long, std::1::allocator > const&, bool, lm::SpecialVocab const&) in initial_probabilities.cc.o lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Merge(unsigned long) in pipeline.cc.o lm::builder::(anonymous namespace)::Master::CreateChains(unsigned long, std::1::vector<unsigned long long, std::1::allocator > const&) in pipeline.cc.o util::stream::Sort<lm::ContextOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o "util::stream::Chain::~Chain()", referenced from: lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o util::stream::Chains::~Chains() in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Merge(unsigned long) in pipeline.cc.o lm::builder::(anonymous namespace)::Master::CreateChains(unsigned long, std::1::vector<unsigned long long, std::1::allocator > const&) in pipeline.cc.o util::stream::Sort<lm::ContextOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o "util::stream::Chain::operator>>(util::stream::WriteAndRecycle const&)", referenced from: util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::SuffixOrder const&, lm::builder::CombineCounts const&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::ContextOrder, util::stream::NeverCombine>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::ContextOrder const&, util::stream::NeverCombine const&) in pipeline.cc.o util::stream::Sort<lm::ContextOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, util::stream::NeverCombine>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::SuffixOrder const&, util::stream::NeverCombine const&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o "util::stream::PRead::Run(util::stream::ChainPosition const&)", referenced from: boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > >::operator()() in pipeline.cc.o "util::stream::PWrite::Run(util::stream::ChainPosition const&)", referenced from: boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > >::operator()() in pipeline.cc.o "util::stream::Thread::UnhandledException(std::exception const&)", referenced from: boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > >::operator()() in initial_probabilities.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::AddRight> > > >::run() in initial_probabilities.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::MergeRight> > > >::run() in initial_probabilities.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::OnlyGamma> > > >::run() in initial_probabilities.cc.o boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > >::operator()() in output.cc.o boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > >::operator()() in output.cc.o boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::reference_wrapper > >::operator()() in pipeline.cc.o ... "util::stream::Thread::~Thread()", referenced from: lm::builder::InitialProbabilities(lm::builder::InitialProbabilitiesConfig const&, std::1::vector<lm::builder::Discount, std::1::allocator > const&, util::stream::Chains&, util::stream::Chains&, util::stream::Chains&, std::1::vector<unsigned long long, std::1::allocator > const&, bool, lm::SpecialVocab const&) in initial_probabilities.cc.o lm::builder::Output::SinkProbs(util::stream::Chains&) in output.cc.o util::stream::Chains::operator>>(util::stream::Recycler const&) in output.cc.o boost::ptr_sequence_adapter<util::stream::Thread, std::1::vector<void*, std::1::allocator<void> >, boost::heap_clone_allocator>::push_back(util::stream::Thread) in output.cc.o lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o boost::ptr_container_detail::reversible_ptr_container<boost::ptr_container_detail::sequence_config<util::stream::Thread, std::1::vector<void*, std::1::allocator<void> > >, boost::heap_clone_allocator>::~reversible_ptr_container() in pipeline.cc.o boost::ptr_sequence_adapter<util::stream::Thread, std::__1::vector<void, std::1::allocator<void> >, boost::heap_clone_allocator>::push_back(util::stream::Thread) in pipeline.cc.o ... "util::stream::Recycler::Run(util::stream::ChainPosition const&)", referenced from: boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > >::operator()() in initial_probabilities.cc.o boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > >::operator()() in output.cc.o boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > >::operator()() in pipeline.cc.o "util::stream::kRecycle", referenced from: lm::builder::InitialProbabilities(lm::builder::InitialProbabilitiesConfig const&, std::1::vector<lm::builder::Discount, std::1::allocator > const&, util::stream::Chains&, util::stream::Chains&, util::stream::Chains&, std::1::vector<unsigned long long, std::__1::allocator > const&, bool, lm::SpecialVocab const&) in initial_probabilities.cc.o lm::builder::Output::SinkProbs(util::stream::Chains&) in output.cc.o util::stream::Chains::operator>>(util::stream::Recycler const&) in output.cc.o lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o util::stream::Chain::operator>>(util::stream::Recycler const&) in pipeline.cc.o "util::MapRead(util::LoadMethod, int, unsigned long long, unsigned long, util::scoped_memory&)", referenced from: lm::builder::CorpusCount::Run(util::stream::ChainPosition const&) in corpus_count.cc.o "util::MakeTemp(StringPiece const&)", referenced from: lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::SuffixOrder const&, lm::builder::CombineCounts const&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::ContextOrder, util::stream::NeverCombine>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::ContextOrder const&, util::stream::NeverCombine const&) in pipeline.cc.o util::stream::Sort<lm::ContextOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, util::stream::NeverCombine>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::SuffixOrder const&, util::stream::NeverCombine const&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, util::stream::NeverCombine>::Merge(unsigned long) in pipeline.cc.o ... "util::ToString(float, char)", referenced from: lm::builder::(anonymous namespace)::StatCollector::CalculateDiscounts(lm::builder::DiscountConfig const&) in adjust_counts.cc.o "util::ToString(unsigned int, char)", referenced from: lm::builder::(anonymous namespace)::StatCollector::CalculateDiscounts(lm::builder::DiscountConfig const&) in adjust_counts.cc.o "util::ToString(unsigned long long, char*)", referenced from: lm::builder::(anonymous namespace)::StatCollector::CalculateDiscounts(lm::builder::DiscountConfig const&) in adjust_counts.cc.o util::Power2Mod::Power2Mod(unsigned long) in corpus_count.cc.o bool util::ProbingHashTable<lm::ngram::ProbingVocabularyEntry, util::IdentityHash, std::1::equal_to, util::Power2Mod>::FindOrInsert(lm::ngram::ProbingVocabularyEntry const&, lm::ngram::ProbingVocabularyEntry&) in corpus_count.cc.o lm::builder::(anonymous namespace)::Writer::Append(unsigned int) in corpus_count.cc.o lm::builder::PrintHook::Sink(lm::builder::HeaderInfo const&, int, util::stream::Chains&) in output.cc.o lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::SuffixOrder const&, lm::builder::CombineCounts const&) in pipeline.cc.o ... "util::Exception::SetLocation(char const, unsigned int, char const, char const, char const)", referenced from: lm::builder::(anonymous namespace)::StatCollector::CalculateDiscounts(lm::builder::DiscountConfig const&) in adjust_counts.cc.o lm::ngram::GrowableVocab::FindOrInsert(StringPiece const&) in corpus_count.cc.o util::Power2Mod::Power2Mod(unsigned long) in corpus_count.cc.o bool util::ProbingHashTable<lm::ngram::ProbingVocabularyEntry, util::IdentityHash, std::__1::equal_to, util::Power2Mod>::FindOrInsert(lm::ngram::ProbingVocabularyEntry const&, lm::ngram::ProbingVocabularyEntry&) in corpus_count.cc.o lm::builder::(anonymous namespace)::ComplainDisallowed(StringPiece, lm::WarningAction&) in corpus_count.cc.o lm::builder::(anonymous namespace)::Writer::Append(unsigned int) in corpus_count.cc.o lm::builder::Interpolate::Run(util::stream::ChainPositions const&) in interpolate.cc.o ... "util::Exception::Exception()", referenced from: lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o "util::Exception::Exception()", referenced from: lm::builder::BadDiscountException::BadDiscountException() in adjust_counts.cc.o lm::builder::BadDiscountException::BadDiscountException() in adjust_counts.cc.o lm::builder::(anonymous namespace)::StatCollector::CalculateDiscounts(lm::builder::DiscountConfig const&) in adjust_counts.cc.o util::Power2Mod::Power2Mod(unsigned long) in corpus_count.cc.o bool util::ProbingHashTable<lm::ngram::ProbingVocabularyEntry, util::IdentityHash, std::1::equal_to, util::Power2Mod>::FindOrInsert(lm::ngram::ProbingVocabularyEntry const&, lm::ngram::ProbingVocabularyEntry&) in corpus_count.cc.o lm::builder::(anonymous namespace)::Writer::Append(unsigned int) in corpus_count.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::SuffixOrder const&, lm::builder::CombineCounts const&) in pipeline.cc.o ... "util::Exception::~Exception()", referenced from: lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o "util::Exception::~Exception()", referenced from: lm::builder::BadDiscountException::~BadDiscountException() in adjust_counts.cc.o lm::builder::BadDiscountException::~BadDiscountException() in adjust_counts.cc.o lm::builder::BadDiscountException::~BadDiscountException() in adjust_counts.cc.o lm::builder::(anonymous namespace)::StatCollector::CalculateDiscounts(lm::builder::DiscountConfig const&) in adjust_counts.cc.o util::Power2Mod::Power2Mod(unsigned long) in corpus_count.cc.o util::ProbingSizeException::~ProbingSizeException() in corpus_count.cc.o util::ProbingSizeException::~ProbingSizeException() in corpus_count.cc.o ... "util::FilePiece::ReadLineOrEOF(StringPiece&, char, bool)", referenced from: lm::builder::CorpusCount::Run(util::stream::ChainPosition const&) in corpus_count.cc.o void lm::builder::CorpusCount::RunWithVocab<lm::ngram::GrowableVocab >(util::stream::ChainPosition const&, lm::ngram::GrowableVocab&) in corpus_count.cc.o "util::FilePiece::FindDelimiterOrEOF(bool const)", referenced from: lm::builder::CorpusCount::Run(util::stream::ChainPosition const&) in corpus_count.cc.o void lm::builder::CorpusCount::RunWithVocab<lm::ngram::GrowableVocab >(util::stream::ChainPosition const&, lm::ngram::GrowableVocab&) in corpus_count.cc.o "util::FilePiece::Shift()", referenced from: lm::builder::CorpusCount::Run(util::stream::ChainPosition const&) in corpus_count.cc.o void lm::builder::CorpusCount::RunWithVocab<lm::ngram::GrowableVocab >(util::stream::ChainPosition const&, lm::ngram::GrowableVocab&) in corpus_count.cc.o "util::FilePiece::FilePiece(char const*, std::1::basic_ostream<char, std::1::char_traits >, unsigned long)", referenced from: lm::builder::CorpusCount::Run(util::stream::ChainPosition const&) in corpus_count.cc.o void lm::builder::CorpusCount::RunWithVocab<lm::ngram::GrowableVocab >(util::stream::ChainPosition const&, lm::ngram::GrowableVocab&) in corpus_count.cc.o "util::FilePiece::FilePiece(int, char const, std::__1::basic_ostream<char, std::1::char_traits >, unsigned long)", referenced from: lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o "util::HolePunch(int, unsigned long long, unsigned long long)", referenced from: util::stream::MergeQueue::Push(void, unsigned long long, unsigned long long) in pipeline.cc.o util::stream::MergeQueue::Pop() in pipeline.cc.o util::stream::MergeQueue::Push(void, unsigned long long, unsigned long long) in pipeline.cc.o util::stream::MergeQueue::Pop() in pipeline.cc.o "util::scoped_fd::~scoped_fd()", referenced from: util::FilePiece::~FilePiece() in corpus_count.cc.o lm::builder::PrintHook::~PrintHook() in output.cc.o lm::builder::PrintHook::~PrintHook() in output.cc.o lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o util::scoped_ptr<util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts> >::~scoped_ptr() in pipeline.cc.o util::stream::Sort<lm::SuffixOrder, lm::builder::CombineCounts>::Sort(util::stream::Chain&, util::stream::SortConfig const&, lm::SuffixOrder const&, lm::builder::CombineCounts const&) in pipeline.cc.o util::FilePiece::~FilePiece() in pipeline.cc.o ... "boost::detail::thread_data_base::~thread_data_base()", referenced from: boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > > >::~thread_data() in initial_probabilities.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > > >::~thread_data() in initial_probabilities.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::AddRight> > > >::~thread_data() in initial_probabilities.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::AddRight> > > >::~thread_data() in initial_probabilities.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::MergeRight> > > >::~thread_data() in initial_probabilities.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::MergeRight> > > >::~thread_data() in initial_probabilities.cc.o boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::OnlyGamma> > > >::~thread_data() in initial_probabilities.cc.o ... "boost::system::system_category()", referenced from: GLOBALsub_I_adjust_counts.cc in adjust_counts.cc.o GLOBALsub_I_corpus_count.cc in corpus_count.cc.o GLOBALsub_I_initial_probabilities.cc in initial_probabilities.cc.o GLOBALsub_I_interpolate.cc in interpolate.cc.o GLOBALsub_I_output.cc in output.cc.o GLOBALsub_I_pipeline.cc in pipeline.cc.o "boost::system::generic_category()", referenced from: GLOBALsub_I_adjust_counts.cc in adjust_counts.cc.o GLOBALsub_I_corpus_count.cc in corpus_count.cc.o boost::thread::start_thread() in initial_probabilities.cc.o boost::mutex::mutex() in initial_probabilities.cc.o boost::condition_variable::condition_variable() in initial_probabilities.cc.o GLOBALsub_I_initial_probabilities.cc in initial_probabilities.cc.o GLOBALsub_I_interpolate.cc in interpolate.cc.o ... "boost::thread::start_thread_noexcept()", referenced from: boost::thread::start_thread() in initial_probabilities.cc.o boost::thread::start_thread() in output.cc.o boost::thread::start_thread() in pipeline.cc.o "typeinfo for lm::VocabLoadException", referenced from: lm::ngram::GrowableVocab::FindOrInsert(StringPiece const&) in corpus_count.cc.o "typeinfo for lm::FormatLoadException", referenced from: lm::builder::(anonymous namespace)::ComplainDisallowed(StringPiece, lm::WarningAction&) in corpus_count.cc.o lm::builder::Interpolate::Run(util::stream::ChainPositions const&) in interpolate.cc.o "typeinfo for util::EndOfFileException", referenced from: GCC_except_table5 in corpus_count.cc.o GCC_except_table6 in corpus_count.cc.o "typeinfo for util::Exception", referenced from: typeinfo for lm::builder::BadDiscountException in adjust_counts.cc.o GCC_except_table5 in corpus_count.cc.o GCC_except_table6 in corpus_count.cc.o typeinfo for util::ProbingSizeException in corpus_count.cc.o lm::builder::Pipeline(lm::builder::PipelineConfig&, int, lm::builder::Output&) in pipeline.cc.o GCC_except_table2 in pipeline.cc.o GCC_except_table136 in pipeline.cc.o ... "typeinfo for boost::detail::thread_data_base", referenced from: typeinfo for boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > > > in initial_probabilities.cc.o typeinfo for boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::AddRight> > > > in initial_probabilities.cc.o typeinfo for boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::MergeRight> > > > in initial_probabilities.cc.o typeinfo for boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value<lm::builder::(anonymous namespace)::OnlyGamma> > > > in initial_probabilities.cc.o typeinfo for boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > > > in output.cc.o typeinfo for boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::_bi::value > > > in output.cc.o typeinfo for boost::detail::thread_data<boost::_bi::bind_t<void, boost::reference_wrapper, boost::_bi::list2<boost::_bi::value, boost::reference_wrapper > > > in pipeline.cc.o ... "vtable for lm::VocabLoadException", referenced from: lm::ngram::GrowableVocab::FindOrInsert(StringPiece const&) in corpus_count.cc.o NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. "vtable for lm::FormatLoadException", referenced from: lm::builder::(anonymous namespace)::ComplainDisallowed(StringPiece, lm::WarningAction&) in corpus_count.cc.o lm::builder::Interpolate::Run(util::stream::ChainPositions const&) in interpolate.cc.o NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. "vtable for util::Exception", referenced from: lm::builder::(anonymous namespace)::StatCollector::CalculateDiscounts(lm::builder::DiscountConfig const&) in adjust_counts.cc.o lm::ngram::GrowableVocab::FindOrInsert(StringPiece const&) in corpus_count.cc.o util::Power2Mod::Power2Mod(unsigned long) in corpus_count.cc.o bool util::ProbingHashTable<lm::ngram::ProbingVocabularyEntry, util::IdentityHash, std::__1::equal_to, util::Power2Mod>::FindOrInsert(lm::ngram::ProbingVocabularyEntry const&, lm::ngram::ProbingVocabularyEntry&) in corpus_count.cc.o lm::builder::(anonymous namespace)::ComplainDisallowed(StringPiece, lm::WarningAction&) in corpus_count.cc.o lm::builder::(anonymous namespace)::Writer::Append(unsigned int) in corpus_count.cc.o lm::builder::Interpolate::Run(util::stream::ChainPositions const&) in interpolate.cc.o ... NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. "vtable for boost::detail::thread_data_base", referenced from: boost::detail::thread_data_base::thread_data_base() in initial_probabilities.cc.o boost::detail::thread_data_base::thread_data_base() in output.cc.o boost::detail::thread_data_base::thread_data_base() in pipeline.cc.o NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. 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]: [lib/libkenlm_builder.dylib] Error 1 make[1]: [lm/builder/CMakeFiles/kenlm_builder.dir/all] Error 2 make: *** [all] Error 2

It could build: libkenlm.dylib and libkenlm_util.dylib Any suggestions?

regards

kpu commented 6 years ago

Looks like OS X wants to have all the dependencies listed for a shared library. Does 35835f1ac4884126458ac89f9bf6dd9ccad561e0 fix it? I don't have OS X to test on, but @hieuhoang might be willing to help.

hieuhoang commented 6 years ago

I've given my mac away in return for a giant ass gpu laptop.

With boost on any platform, I would always build manually using the instructions here: http://www.statmt.org/moses/?n=Development.GetStarted (Manually installing Boost). This create static libs only, make sure you don't have boost anywhere else on your computer

Then I would compile moses/kenlm/whatever using the default settings

mcelvg commented 6 years ago

building 45686c90b3a94aee718e005d7c5d37b1a74b4524,

on this system:

macOS 10.12.6
gcc 7.3.0
cmake 3.10.2
boost 1.66.0
eigen 3.3.4

with:

mkdir -p build
cd build
cmake ..
make -j 4

produces:

[ 36%] Linking CXX executable ../tests/file_piece_test
Undefined symbols for architecture x86_64:
  "boost::unit_test::ut_detail::normalize_test_case_name[abi:cxx11](boost::unit_test::basic_cstring<char const>)", referenced from:
      boost::unit_test::make_test_case(boost::function<void ()> const&, boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long) in string_stream_test.cc.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
Undefined symbols for architecture x86_64:
  "boost::unit_test::ut_detail::normalize_test_case_name[abi:cxx11](boost::unit_test::basic_cstring<char const>)", referenced from:
      boost::unit_test::make_test_case(boost::function<void ()> const&, boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long) in file_piece_test.cc.o
ld: symbol(s) not found for architecturemake[2]:  x86_64
*** [tests/string_stream_test] Error 1
collect2: error: ld returned 1 exit status
make[1]: *** [util/CMakeFiles/string_stream_test.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make[2]: *** [tests/file_piece_test] Error 1
make[1]: *** [util/CMakeFiles/file_piece_test.dir/all] Error 2
[ 37%] Linking CXX executable ../tests/sorted_uniform_test
Undefined symbols for architecture x86_64:
  "boost::test_tools::tt_detail::print_log_value<unsigned char>::operator()(std::basic_ostream<char, std::char_traits<char> >&, unsigned char)", referenced from:
      boost::unit_test::lazy_ostream_impl<boost::unit_test::lazy_ostream, boost::test_tools::tt_detail::print_helper_t<unsigned char>, boost::test_tools::tt_detail::print_helper_t<unsigned char> const&>::operator()(std::basic_ostream<char, std::char_traits<char> >&) const in sorted_uniform_test.cc.o
  "boost::unit_test::ut_detail::normalize_test_case_name[abi:cxx11](boost::unit_test::basic_cstring<char const>)", referenced from:
      boost::unit_test::make_test_case(boost::function<void ()> const&, boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long) in sorted_uniform_test.cc.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make[2]: *** [tests/sorted_uniform_test] Error 1
make[1]: *** [util/CMakeFiles/sorted_uniform_test.dir/all] Error 2
[ 37%] Linking CXX executable ../bin/probing_hash_table_benchmark
[ 37%] Built target probing_hash_table_benchmark
make: *** [all] Error 2
kpu commented 6 years ago

Progress! Those are tests failing to link, so you should be able to use the code as normal.

Boost test has the incredibly annoying property that it requires the macro BOOST_TEST_DYN_LINK to be set at compile time if (and only if) linked dynamically.

Can you make clean and make VERBOSE=1 -j4 then post output? I want to see if it's compiling with -DBOOST_TEST_DYN_LINK and also the linkage.

Finally, how did you install Boost?

mcelvg commented 6 years ago

I installed boost with brew install boost (no options). That command installs boost with this script.

make clean && make VERBOSE=1 -j4 &> issue112-osx-build-error.txt issue112-osx-build-error.txt

kpu commented 6 years ago

I note the build log shows -DBOOST_TEST_DYN_LINK being set when tests are compiled and it is dynamically linking against boost_unit_test_framework. This is a correct configuration.

I think your boost install is broken in the sense that it was compiled with a slightly different compiler. Here is an example that should work according to the documentation: http://www.boost.org/doc/libs/1_66_0/libs/test/doc/html/boost_test/usage_variants.html

#define BOOST_TEST_MODULE test module name
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE(example) {
  BOOST_CHECK(true);
}

On linux, I compile this as

g++ foo.cc -lboost_unit_test_framework

You might need to add .dylib. If that doesn't work, blame your Boost installation.

mcelvg commented 6 years ago

You're right.

I reinstalled boost and was able to build successfully with AppleClang 8.1.0.802004. This is the system default compiler, which has OpenMP disabled.

As indicated here, it is probably necessary to build custom binaries to use another compiler.

Thanks for your help. This issue should be closed.

mcelvg commented 6 years ago

In case anyone finds this looking to compile on OSX with OpenMP enabled, I can confirm the following also works.

Successfully compiled 45686c90b3a94aee718e005d7c5d37b1a74b4524 & cdd794598ea15dc23a7daaf7a8cf89423c97f7e6 (from https://kheafield.com/code/kenlm.tar.gz) following the posted instructions for each, without any errors or warnings.

specs:

macOS 10.12.6
cmake 3.3.2
clang 5.0.1
xz 5.2.2
eigen 3.3.4
boost 1.66.0
--   program_options
--   system
--   thread
--   unit_test_framework