我正在尝试从Mountain Lion(Mac OS 10.8)的源代码编译mkvtoolnix
。我相信所有先决条件都已安装,因为./configure
有效。不过我确实需要更改我的./configure命令行:
./configure ZLIB_CFLAGS="-l/usr/lib/libz.dylib" ZLIB_LIBS="-L/usr/lib" \
CURL_CFLAGS="-l/usr/lib/libcurl.dylib" CURL_LIBS="-L/usr/lib"
然后我运行rake
并编译所有内容直到最后,我收到此消息:
LINK src/mkvmerge
Undefined symbols for architecture x86_64:
"libmatroska::KaxCueDuration::ClassInfos", referenced from:
cluster_helper_c::postprocess_cues() in libmtxmerge.a(cluster_helper.o)
"libmatroska::KaxCueRelativePosition::ClassInfos", referenced from:
cluster_helper_c::postprocess_cues() in libmtxmerge.a(cluster_helper.o)
"libebml::EbmlString::SetValue(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from:
void FixMandatoryElement<libmatroska::KaxTagName, libmatroska::KaxTagLangue, libmatroska::KaxTagDefault>(libebml::EbmlMaster*) in libmtxcommon.a(tags.o)
mtx::xml::ebml_converter_c::parse_string(mtx::xml::ebml_converter_c::parser_context_t&) in libmtxcommon.a(ebml_converter.o)
mtx::xml::ebml_chapters_converter_c::fix_display(libmatroska::KaxChapterDisplay&) const in libmtxcommon.a(ebml_chapters_converter.o)
"libebml::EbmlSInteger::SetValue(long long)", referenced from:
kax_reference_block_c::UpdateSize(bool, bool) in libmtxmerge.a(libmatroska_extensions.o)
mtx::xml::ebml_converter_c::parse_int(mtx::xml::ebml_converter_c::parser_context_t&) in libmtxcommon.a(ebml_converter.o)
"libebml::EbmlUInteger::SetValue(unsigned long long)", referenced from:
adjust_chapter_timecodes(libebml::EbmlMaster&, long long) in libmtxcommon.a(chapters.o)
remove_entries(long long, long long, long long, libebml::EbmlMaster&) in libmtxcommon.a(chapters.o)
cluster_helper_c::postprocess_cues() in libmtxmerge.a(cluster_helper.o)
fix_mandatory_tag_elements(libebml::EbmlElement*) in libmtxcommon.a(tags.o)
void FixMandatoryElement<libmatroska::KaxTagName, libmatroska::KaxTagLangue, libmatroska::KaxTagDefault>(libebml::EbmlMaster*) in libmtxcommon.a(tags.o)
mtx::xml::ebml_chapters_converter_c::fix_atom(libmatroska::KaxChapterAtom&) const in libmtxcommon.a(ebml_chapters_converter.o)
mtx::xml::ebml_chapters_converter_c::fix_edition_entry(libmatroska::KaxEditionEntry&) const in libmtxcommon.a(ebml_chapters_converter.o)
...
"libebml::EbmlUnicodeString::SetValueUTF8(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from:
set_simple_tag_name(libmatroska::KaxTagSimple&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libmtxcommon.a(tags.o)
set_simple_tag_value(libmatroska::KaxTagSimple&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libmtxcommon.a(tags.o)
set_simple_tag(libmatroska::KaxTagSimple&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libmtxcommon.a(tags.o)
convert_old_tags(libmatroska::KaxTags&) in libmtxcommon.a(tags.o)
mtx::xml::ebml_converter_c::parse_ustring(mtx::xml::ebml_converter_c::parser_context_t&) in libmtxcommon.a(ebml_converter.o)
"libebml::EbmlUnicodeString::SetValue(libebml::UTFstring const&)", referenced from:
void FixMandatoryElement<libmatroska::KaxTagName, libmatroska::KaxTagLangue, libmatroska::KaxTagDefault>(libebml::EbmlMaster*) in libmtxcommon.a(tags.o)
"libebml::EbmlString::GetValue() const", referenced from:
kt_get_codec_id(libmatroska::KaxTrackEntry&) in libmtxcommon.a(ebml.o)
kt_get_language(libmatroska::KaxTrackEntry&) in libmtxcommon.a(ebml.o)
dump_ebml_elements(libebml::EbmlElement*, bool, unsigned int) in libmtxcommon.a(output.o)
void FixMandatoryElement<libmatroska::KaxTagName, libmatroska::KaxTagLangue, libmatroska::KaxTagDefault>(libebml::EbmlMaster*) in libmtxcommon.a(tags.o)
kax_reader_c::read_headers_tracks(mm_io_c*, libebml::EbmlElement*, long long) in libmtxinput.a(r_matroska.o)
kax_reader_c::handle_attachments(mm_io_c*, libebml::EbmlElement*, long long) in libmtxinput.a(r_matroska.o)
mtx::xml::ebml_converter_c::format_string(pugi::xml_node&, libebml::EbmlElement&) in libmtxcommon.a(ebml_converter.o)
...
"libebml::EbmlSInteger::GetValue() const", referenced from:
dump_ebml_elements(libebml::EbmlElement*, bool, unsigned int) in libmtxcommon.a(output.o)
kax_reader_c::process_block_group(libmatroska::KaxCluster*, libmatroska::KaxBlockGroup*) in libmtxinput.a(r_matroska.o)
mtx::xml::ebml_converter_c::format_int(pugi::xml_node&, libebml::EbmlElement&) in libmtxcommon.a(ebml_converter.o)
"libebml::EbmlUInteger::GetValue() const", referenced from:
get_chapter_start(libmatroska::KaxChapterAtom&, long long) in libmtxcommon.a(chapters.o)
get_chapter_end(libmatroska::KaxChapterAtom&, long long) in libmtxcommon.a(chapters.o)
get_chapter_uid(libmatroska::KaxChapterAtom&) in libmtxcommon.a(chapters.o)
find_edition_with_uid(libmatroska::KaxChapters&, unsigned long long) in libmtxcommon.a(chapters.o)
find_chapter_with_uid(libmatroska::KaxChapters&, unsigned long long) in libmtxcommon.a(chapters.o)
move_chapters_by_edition(libmatroska::KaxChapters&, libmatroska::KaxChapters&) in libmtxcommon.a(chapters.o)
adjust_chapter_timecodes(libebml::EbmlMaster&, long long) in libmtxcommon.a(chapters.o)
...
"libebml::EbmlUnicodeString::GetValueUTF8() const", referenced from:
dump_ebml_elements(libebml::EbmlElement*, bool, unsigned int) in libmtxcommon.a(output.o)
get_simple_tag_value(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, libebml::EbmlMaster&) in libmtxcommon.a(tags.o)
get_simple_tag_name(libmatroska::KaxTagSimple const&) in libmtxcommon.a(tags.o)
get_simple_tag_value(libmatroska::KaxTagSimple const&) in libmtxcommon.a(tags.o)
convert_old_tags(libmatroska::KaxTags&) in libmtxcommon.a(tags.o)
kax_reader_c::read_headers_info(libebml::EbmlElement*&, libebml::EbmlElement*&, int&) in libmtxinput.a(r_matroska.o)
kax_reader_c::read_headers_info_writing_app(libmatroska::KaxWritingApp*&) in libmtxinput.a(r_matroska.o)
...
"libebml::EbmlUnicodeString::GetValue() const", referenced from:
void FixMandatoryElement<libmatroska::KaxTagName, libmatroska::KaxTagLangue, libmatroska::KaxTagDefault>(libebml::EbmlMaster*) in libmtxcommon.a(tags.o)
kax_reader_c::read_headers_info(libebml::EbmlElement*&, libebml::EbmlElement*&, int&) in libmtxinput.a(r_matroska.o)
kax_reader_c::read_headers_tracks(mm_io_c*, libebml::EbmlElement*, long long) in libmtxinput.a(r_matroska.o)
kax_reader_c::handle_attachments(mm_io_c*, libebml::EbmlElement*, long long) in libmtxinput.a(r_matroska.o)
"libebml::EbmlFloat::GetValue() const", referenced from:
kt_get_a_sfreq(libmatroska::KaxTrackEntry&) in libmtxcommon.a(ebml.o)
kt_get_a_osfreq(libmatroska::KaxTrackEntry&) in libmtxcommon.a(ebml.o)
dump_ebml_elements(libebml::EbmlElement*, bool, unsigned int) in libmtxcommon.a(output.o)
kax_reader_c::read_headers_track_audio(kax_track_t*, libmatroska::KaxTrackAudio*) in libmtxinput.a(r_matroska.o)
kax_reader_c::read_headers_track_video(kax_track_t*, libmatroska::KaxTrackVideo*) in libmtxinput.a(r_matroska.o)
kax_reader_c::read_headers_info(libebml::EbmlElement*&, libebml::EbmlElement*&, int&) in libmtxinput.a(r_matroska.o)
"std::ctype<char>::_M_widen_init() const", referenced from:
__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > boost::io::detail::skip_asterisk<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::ctype<char> >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::ctype<char> const&) in mkvmerge.o
bool boost::io::detail::parse_printf_directive<char, std::char_traits<char>, std::allocator<char>, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::ctype<char> >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, boost::io::detail::format_item<char, std::char_traits<char>, std::allocator<char> >*, std::ctype<char> const&, unsigned long, unsigned char) in mkvmerge.o
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 mkvmerge.o
void boost::io::detail::put<char, std::char_traits<char>, std::allocator<char>, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, 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 mkvmerge.o
void boost::io::detail::put<char, std::char_traits<char>, std::allocator<char>, unsigned int const&>(unsigned int 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 mkvmerge.o
void boost::io::detail::put<char, std::char_traits<char>, std::allocator<char>, char const*&>(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 mkvmerge.o
void boost::io::detail::put<char, std::char_traits<char>, std::allocator<char>, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(std::basic_string<char, std::char_traits<char>, std::allocator<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 mkvmerge.o
...
"std::domain_error::~domain_error()", referenced from:
boost::bad_rational::~bad_rational() in libmtxcommon.a(mpeg4_p10.o)
boost::bad_rational::~bad_rational() in libmtxcommon.a(mpeg4_p10.o)
"std::__detail::__prime_list", referenced from:
__GLOBAL__sub_I_output_control.cpp in libmtxmerge.a(output_control.o)
std::__detail::_Prime_rehash_policy::_M_next_bkt(unsigned long) const in libmtxmerge.a(pr_generic.o)
std::__detail::_Prime_rehash_policy::_M_next_bkt(unsigned long) const in libmtxmerge.a(cluster_helper.o)
"std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*)", referenced from:
qtmp4_reader_c::detect_interleaving() in libmtxinput.a(r_qtmp4.o)
M2VParser::AddTimecode(long long) in libmpegparser.a(M2VParser.o)
"std::__detail::_List_node_base::_M_unhook()", referenced from:
M2VParser::FlushWaitQueue() in libmpegparser.a(M2VParser.o)
M2VParser::StampFrame(MPEGFrame*) in libmpegparser.a(M2VParser.o)
"std::__throw_bad_function_call()", referenced from:
at_scope_exit_c::~at_scope_exit_c() in mkvmerge.o
bool parse_number<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >(boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, double&) in mkvmerge.o
mxinfo(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libmtxcommon.a(output.o)
mxinfo(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) in libmtxcommon.a(output.o)
mxwarn(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libmtxcommon.a(output.o)
mxerror(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libmtxcommon.a(output.o)
mxinfo(boost::basic_format<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) in libmtxcommon.a(output.o)
...
"_curl_easy_cleanup", referenced from:
url_retriever_c::retrieve(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&) in libmtxcommon.a(curl.o)
"_curl_easy_init", referenced from:
url_retriever_c::retrieve(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&) in libmtxcommon.a(curl.o)
"_curl_easy_perform", referenced from:
url_retriever_c::retrieve(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&) in libmtxcommon.a(curl.o)
"_curl_easy_setopt", referenced from:
url_retriever_c::retrieve(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&) in libmtxcommon.a(curl.o)
"_curl_global_init", referenced from:
url_retriever_c::retrieve(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&) in libmtxcommon.a(curl.o)
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
不确定在这做什么。有什么建议吗?