Related
I have downloaded the whole Boost source from https://www.boost.org/doc/libs/1_72_0/libs/regex/doc/html/index.html and I have the instructions of installation:
tar -vcf boost_1_76_0.tar
./bootstrap.sh --with-toolset=clang --with-libraries=program_options,regex,filesystem,system
./b2
sudo ./b2 install
Then I got a message that everything has been successfully installed:
The following directory should be added to compiler include paths:
/Users/3omni/Documents/GitHub/PERSONAL/GEN/boost_1_76_0
The following directory should be added to linker library paths:
/Users/3omni/Documents/GitHub/PERSONAL/GEN/boost_1_76_0/stage/lib
Now, I have a code where I load the Boost regex header:
#include <boost/regex.hpp>
[More code...]
And now the problem is with library linking, I have tried to compile with:
gcc -I/Users/3omni/Documents/GitHub/PERSONAL/GEN/boost_1_76_0 -L/Users/3omni/Documents/GitHub/PERSONAL/GEN/boost_1_76_0/stage/lib -O3 -o readvcf readvcf.cc -lboost_regex
(Not sure if I should use -lboost_regex but that's something I found in the internet).
And this fails horribly with ...
Undefined symbols for architecture x86_64:
"std::logic_error::what() const", referenced from:
vtable for boost::wrapexcept<std::invalid_argument> in readvcf-3b61f4.o
vtable for boost::wrapexcept<std::logic_error> in readvcf-3b61f4.o
"std::runtime_error::what() const", referenced from:
vtable for boost::wrapexcept<std::runtime_error> in readvcf-3b61f4.o
vtable for boost::regex_error in readvcf-3b61f4.o
vtable for boost::wrapexcept<boost::regex_error> in readvcf-3b61f4.o
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::compare(char const*) const", referenced from:
char* boost::re_detail_500::re_is_set_member<char*, char, boost::regex_traits<char, boost::cpp_regex_traits<char> >, unsigned int>(char*, char*, boost::re_detail_500::re_set_long<unsigned int> const*, boost::re_detail_500::regex_data<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, bool) in readvcf-3b61f4.o
std::__1::__wrap_iter<char const*> boost::re_detail_500::re_is_set_member<std::__1::__wrap_iter<char const*>, char, boost::regex_traits<char, boost::cpp_regex_traits<char> >, unsigned int>(std::__1::__wrap_iter<char const*>, std::__1::__wrap_iter<char const*>, boost::re_detail_500::re_set_long<unsigned int> const*, boost::re_detail_500::regex_data<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, bool) in readvcf-3b61f4.o
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::compare(unsigned long, unsigned long, char const*, unsigned long) const", referenced from:
unsigned int boost::re_detail_500::find_sort_syntax<boost::re_detail_500::cpp_regex_traits_implementation<char>, char>(boost::re_detail_500::cpp_regex_traits_implementation<char> const*, char*) in readvcf-3b61f4.o
boost::re_detail_500::lookup_default_collate_name(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in readvcf-3b61f4.o
"std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from:
VCF2SNP(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int, int) in readvcf-3b61f4.o
boost::re_detail_500::basic_regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::parse_open_paren() in readvcf-3b61f4.o
boost::re_detail_500::basic_regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::parse_alt() in readvcf-3b61f4.o
boost::re_detail_500::basic_regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::parse_perl_extension() in readvcf-3b61f4.o
void boost::re_detail_500::named_subexpressions::set_name<char>(char const*, char const*, int) in readvcf-3b61f4.o
boost::re_detail_500::basic_regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::parse_set_literal(boost::re_detail_500::basic_char_set<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >&) in readvcf-3b61f4.o
boost::re_detail_500::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::create_startmaps(boost::re_detail_500::re_syntax_base*) in readvcf-3b61f4.o
...
"std::__1::__vector_base_common<true>::__throw_out_of_range() const", referenced from:
boost::re_detail_500::basic_regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::parse_open_paren() in readvcf-3b61f4.o
boost::re_detail_500::basic_regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::parse_perl_extension() in readvcf-3b61f4.o
"std::__1::__basic_string_common<true>::__throw_length_error() const", referenced from:
boost::re_detail_500::cpp_regex_traits_char_layer<char>::init() in readvcf-3b61f4.o
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > std::__1::operator+<char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in readvcf-3b61f4.o
boost::re_detail_500::cpp_regex_traits_implementation<char>::lookup_classname(char const*, char const*) const in readvcf-3b61f4.o
boost::re_detail_500::cpp_regex_traits_implementation<char>::lookup_classname_imp(char const*, char const*) const in readvcf-3b61f4.o
boost::re_detail_500::cpp_regex_traits_implementation<char>::error_string(boost::regex_constants::error_type) const in readvcf-3b61f4.o
boost::re_detail_500::cpp_regex_traits_implementation<char>::lookup_collatename(char const*, char const*) const in readvcf-3b61f4.o
boost::re_detail_500::lookup_default_collate_name(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in readvcf-3b61f4.o
...
"std::__1::locale::has_facet(std::__1::locale::id&) const", referenced from:
boost::re_detail_500::cpp_regex_traits_base<char>::imbue(std::__1::locale const&) in readvcf-3b61f4.o
std::__1::basic_filebuf<char, std::__1::char_traits<char> >::basic_filebuf() in readvcf-3b61f4.o
"std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
getAlleles(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::vector<std::__1::vector<bool, std::__1::allocator<bool> >, std::__1::allocator<std::__1::vector<bool, std::__1::allocator<bool> > > >&, int) in readvcf-3b61f4.o
VCF2SNP(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int, int) in readvcf-3b61f4.o
std::__1::basic_filebuf<char, std::__1::char_traits<char> >::imbue(std::__1::locale const&) in readvcf-3b61f4.o
boost::re_detail_500::cpp_regex_traits_base<char>::imbue(std::__1::locale const&) in readvcf-3b61f4.o
boost::cpp_regex_traits<char>::toi(char const*&, char const*, int) const in readvcf-3b61f4.o
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in readvcf-3b61f4.o
std::__1::basic_filebuf<char, std::__1::char_traits<char> >::basic_filebuf() in readvcf-3b61f4.o
...
And much more. Up to:
_main in readvcf-3b61f4.o
std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_istringstream() in readvcf-3b61f4.o
virtual thunk to std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_istringstream() in readvcf-3b61f4.o
...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
I have run out of ideas and I cannot find any solution. Please, any help would be really appreciated! Thank you in advance
You are using GCC to build a c++ program, so we get these linkage errors. The g++ tool is used to build a c++ program, it automatically adds the standard library linkage for you.
Can be fixed by
use g++
g++ -I/Users/3omni/Documents/GitHub/PERSONAL/GEN/boost_1_76_0 -L/Users/3omni/Documents/GitHub/PERSONAL/GEN/boost_1_76_0/stage/lib -O3 -o readvcf readvcf.cc -lboost_rege
use GCC with the additional option (Strongly not recommended)
gcc -x c++ -I/Users/3omni/Documents/GitHub/PERSONAL/GEN/boost_1_76_0 -L/Users/3omni/Documents/GitHub/PERSONAL/GEN/boost_1_76_0/stage/lib -O3 -o readvcf readvcf.cc -lboost_regex -lstdc++
Related question:undefined reference to __cxa_end_cleanup'
I have C++ files in my iOS Xcode project. Those files uses the next libraries that I'm calling via HomeBrew:
mpg123/1.26.5
libgcrypt
ffmpeg
libgpg-error
fftw
libsndfile
The way I'm including them in the project is by setting the HeaderSearch Paths:
And the Library Search Paths:
That is all I'm doing to call those libraries. The error that I'm getting when I compile the project is the next one:
Undefined symbols for architecture x86_64:
"_mpg123_scan", referenced from:
MP3InputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
"_mpg123_format_none", referenced from:
MP3InputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
"_mpg123_length", referenced from:
MP3InputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
"_mpg123_close", referenced from:
MP3InputStream::close() in mp3inputstream.o
MP3InputStream::detect(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::ScopedMHandle::~ScopedMHandle() in mp3inputstream.o
"_fftwf_plan_dft_r2c_1d", referenced from:
fftar_float(unsigned long, float*, float*) in fft.o
"_fftwf_free", referenced from:
free_array_float(float*) in fft.o
"_mpg123_read", referenced from:
MP3InputStream::read_frames(std::__1::vector<float, std::__1::allocator<float> >&, unsigned long) in mp3inputstream.o
MP3InputStream::detect(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
"_fftwf_malloc", referenced from:
new_array_float(unsigned long) in fft.o
"_sf_readf_int", referenced from:
SFInputStream::read_frames(std::__1::vector<float, std::__1::allocator<float> >&, unsigned long) in sfinputstream.o
"_mpg123_open", referenced from:
MP3InputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
MP3InputStream::detect(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
"_avformat_free_context", referenced from:
HLSOutputStream::close() in hlsoutputstream.o
"_mpg123_param", referenced from:
MP3InputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
MP3InputStream::detect(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
"_avio_open", referenced from:
HLSOutputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, unsigned long, double, unsigned long) in hlsoutputstream.o
"_mpg123_delete", referenced from:
MP3InputStream::close() in mp3inputstream.o
MP3InputStream::detect(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::ScopedMHandle::~ScopedMHandle() in mp3inputstream.o
"_avformat_write_header", referenced from:
HLSOutputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, unsigned long, double, unsigned long) in hlsoutputstream.o
"_avcodec_free_context", referenced from:
HLSOutputStream::close_stream() in hlsoutputstream.o
"_swr_free", referenced from:
HLSOutputStream::close_stream() in hlsoutputstream.o
"_fftwf_plan_dft_c2r_1d", referenced from:
fftsr_float(unsigned long, float*, float*) in fft.o
"_swr_get_delay", referenced from:
HLSOutputStream::write_audio_frame(Error&) in hlsoutputstream.o
"_av_log", referenced from:
HLSOutputStream::write_audio_frame(Error&) in hlsoutputstream.o
"_mpg123_getformat", referenced from:
MP3InputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
MP3InputStream::detect(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
"_av_frame_make_writable", referenced from:
HLSOutputStream::write_audio_frame(Error&) in hlsoutputstream.o
"_fftwf_execute_dft_r2c", referenced from:
fftar_float(unsigned long, float*, float*) in fft.o
"_av_rescale_rnd", referenced from:
HLSOutputStream::write_audio_frame(Error&) in hlsoutputstream.o
"_swr_convert", referenced from:
HLSOutputStream::write_audio_frame(Error&) in hlsoutputstream.o
"ff_decode(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, WavData&)", referenced from:
_main in testhls.o
"_avcodec_send_frame", referenced from:
HLSOutputStream::write_audio_frame(Error&) in hlsoutputstream.o
"_gcry_cipher_encrypt", referenced from:
Random::seed(unsigned long long, Random::Stream) in random.o
Random::refill_buffer() in random.o
"_av_strerror", referenced from:
av_make_error_string(char*, unsigned long, int) in hlsoutputstream.o
"_avcodec_open2", referenced from:
HLSOutputStream::open_audio(AVCodec*, AVDictionary*) in hlsoutputstream.o
"_avio_closep", referenced from:
HLSOutputStream::close() in hlsoutputstream.o
"_av_dict_free", referenced from:
HLSOutputStream::open_audio(AVCodec*, AVDictionary*) in hlsoutputstream.o
"_swr_alloc", referenced from:
HLSOutputStream::open_audio(AVCodec*, AVDictionary*) in hlsoutputstream.o
"_sf_readf_float", referenced from:
SFInputStream::read_frames(std::__1::vector<float, std::__1::allocator<float> >&, unsigned long) in sfinputstream.o
"VResampler::VResampler()", referenced from:
BufferedResamplerImpl<VResampler>::BufferedResamplerImpl(int, int, int) in wmadd.o
resample(WavData const&, int) in wmget.o
"_av_opt_set_int", referenced from:
HLSOutputStream::open_audio(AVCodec*, AVDictionary*) in hlsoutputstream.o
"_sf_close", referenced from:
SFOutputStream::open(std::__1::function<SNDFILE_tag* (SF_INFO*)>, int, int, int, SFOutputStream::OutFormat) in sfoutputstream.o
SFOutputStream::close() in sfoutputstream.o
SFInputStream::close() in sfinputstream.o
SFInputStream::open(std::__1::function<SNDFILE_tag* (SF_INFO*)>) in sfinputstream.o
"_av_opt_set_sample_fmt", referenced from:
HLSOutputStream::open_audio(AVCodec*, AVDictionary*) in hlsoutputstream.o
"_mpg123_format", referenced from:
MP3InputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
"_swr_init", referenced from:
HLSOutputStream::open_audio(AVCodec*, AVDictionary*) in hlsoutputstream.o
"_av_frame_get_buffer", referenced from:
HLSOutputStream::alloc_audio_frame(AVSampleFormat, unsigned long long, int, int, Error&) in hlsoutputstream.o
"_gcry_check_version", referenced from:
gcrypt_init() in random.o
"_av_interleaved_write_frame", referenced from:
HLSOutputStream::write_frame(AVRational const*, AVStream*, AVPacket*) in hlsoutputstream.o
"_av_packet_rescale_ts", referenced from:
HLSOutputStream::write_frame(AVRational const*, AVStream*, AVPacket*) in hlsoutputstream.o
"_av_frame_alloc", referenced from:
HLSOutputStream::alloc_audio_frame(AVSampleFormat, unsigned long long, int, int, Error&) in hlsoutputstream.o
"_avcodec_find_encoder", referenced from:
HLSOutputStream::add_stream(AVCodec**, AVCodecID) in hlsoutputstream.o
"Resampler::inpsize() const", referenced from:
BufferedResamplerImpl<Resampler>::write_frames(std::__1::vector<float, std::__1::allocator<float> > const&) in wmadd.o
void process_resampler<Resampler>(Resampler&, std::__1::vector<float, std::__1::allocator<float> > const&, std::__1::vector<float, std::__1::allocator<float> >&) in wmget.o
"_av_dict_copy", referenced from:
HLSOutputStream::open_audio(AVCodec*, AVDictionary*) in hlsoutputstream.o
"_avcodec_get_name", referenced from:
HLSOutputStream::add_stream(AVCodec**, AVCodecID) in hlsoutputstream.o
"_avcodec_alloc_context3", referenced from:
HLSOutputStream::add_stream(AVCodec**, AVCodecID) in hlsoutputstream.o
"_av_get_channel_layout", referenced from:
HLSOutputStream::add_stream(AVCodec**, AVCodecID) in hlsoutputstream.o
"_av_log_set_level", referenced from:
HLSOutputStream::HLSOutputStream(int, int, int) in hlsoutputstream.o
"_mpg123_strerror", referenced from:
MP3InputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
MP3InputStream::read_frames(std::__1::vector<float, std::__1::allocator<float> >&, unsigned long) in mp3inputstream.o
"_gcry_randomize", referenced from:
Random::gen_key() in random.o
"_gcry_cipher_close", referenced from:
Random::~Random() in random.o
"_gcry_strerror", referenced from:
Random::die_on_error(char const*, unsigned int) in random.o
"_gcry_cipher_setctr", referenced from:
Random::seed(unsigned long long, Random::Stream) in random.o
"Resampler::setup(unsigned int, unsigned int, unsigned int, unsigned int)", referenced from:
create_resampler(int, int, int) in wmadd.o
resample(WavData const&, int) in wmget.o
"_fftwf_execute_dft_c2r", referenced from:
fftsr_float(unsigned long, float*, float*) in fft.o
"_gcry_strsource", referenced from:
Random::die_on_error(char const*, unsigned int) in random.o
"_avformat_alloc_output_context2", referenced from:
HLSOutputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, unsigned long, double, unsigned long) in hlsoutputstream.o
"_gcry_cipher_setkey", referenced from:
Random::Random(unsigned long long, Random::Stream) in random.o
"_avcodec_parameters_from_context", referenced from:
HLSOutputStream::open_audio(AVCodec*, AVDictionary*) in hlsoutputstream.o
"_sf_open_virtual", referenced from:
SFOutputStream::open(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*, int, int, int, SFOutputStream::OutFormat)::$_1::operator()(SF_INFO*) const in sfoutputstream.o
SFInputStream::open(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > const*)::$_1::operator()(SF_INFO*) const in sfinputstream.o
"_av_rescale_q", referenced from:
HLSOutputStream::write_audio_frame(Error&) in hlsoutputstream.o
"_sf_strerror", referenced from:
SFOutputStream::open(std::__1::function<SNDFILE_tag* (SF_INFO*)>, int, int, int, SFOutputStream::OutFormat) in sfoutputstream.o
SFOutputStream::write_frames(std::__1::vector<float, std::__1::allocator<float> > const&) in sfoutputstream.o
SFInputStream::open(std::__1::function<SNDFILE_tag* (SF_INFO*)>) in sfinputstream.o
SFInputStream::read_frames(std::__1::vector<float, std::__1::allocator<float> >&, unsigned long) in sfinputstream.o
"_mpg123_outblock", referenced from:
MP3InputStream::read_frames(std::__1::vector<float, std::__1::allocator<float> >&, unsigned long) in mp3inputstream.o
MP3InputStream::detect(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
"_sf_error", referenced from:
SFOutputStream::open(std::__1::function<SNDFILE_tag* (SF_INFO*)>, int, int, int, SFOutputStream::OutFormat) in sfoutputstream.o
SFOutputStream::write_frames(std::__1::vector<float, std::__1::allocator<float> > const&) in sfoutputstream.o
SFInputStream::open(std::__1::function<SNDFILE_tag* (SF_INFO*)>) in sfinputstream.o
SFInputStream::read_frames(std::__1::vector<float, std::__1::allocator<float> >&, unsigned long) in sfinputstream.o
"_gcry_cipher_open", referenced from:
Random::Random(unsigned long long, Random::Stream) in random.o
"_mpg123_rates", referenced from:
MP3InputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
"_av_init_packet", referenced from:
HLSOutputStream::write_audio_frame(Error&) in hlsoutputstream.o
"VResampler::inpsize() const", referenced from:
BufferedResamplerImpl<VResampler>::write_frames(std::__1::vector<float, std::__1::allocator<float> > const&) in wmadd.o
void process_resampler<VResampler>(VResampler&, std::__1::vector<float, std::__1::allocator<float> > const&, std::__1::vector<float, std::__1::allocator<float> >&) in wmget.o
"_sf_open", referenced from:
SFOutputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, int, int, SFOutputStream::OutFormat)::$_0::operator()(SF_INFO*) const in sfoutputstream.o
SFInputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0::operator()(SF_INFO*) const in sfinputstream.o
"_av_opt_set", referenced from:
HLSOutputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, unsigned long, double, unsigned long) in hlsoutputstream.o
"Resampler::process()", referenced from:
BufferedResamplerImpl<Resampler>::write_frames(std::__1::vector<float, std::__1::allocator<float> > const&) in wmadd.o
void process_resampler<Resampler>(Resampler&, std::__1::vector<float, std::__1::allocator<float> > const&, std::__1::vector<float, std::__1::allocator<float> >&) in wmget.o
"VResampler::process()", referenced from:
BufferedResamplerImpl<VResampler>::write_frames(std::__1::vector<float, std::__1::allocator<float> > const&) in wmadd.o
void process_resampler<VResampler>(VResampler&, std::__1::vector<float, std::__1::allocator<float> > const&, std::__1::vector<float, std::__1::allocator<float> >&) in wmget.o
"_mpg123_init", referenced from:
mp3_init() in mp3inputstream.o
"_av_get_channel_layout_nb_channels", referenced from:
HLSOutputStream::add_stream(AVCodec**, AVCodecID) in hlsoutputstream.o
"_gcry_control", referenced from:
gcrypt_init() in random.o
"_sf_writef_int", referenced from:
SFOutputStream::write_frames(std::__1::vector<float, std::__1::allocator<float> > const&) in sfoutputstream.o
"Resampler::~Resampler()", referenced from:
BufferedResamplerImpl<Resampler>::~BufferedResamplerImpl() in wmadd.o
resample(WavData const&, int) in wmget.o
"_avformat_new_stream", referenced from:
HLSOutputStream::add_stream(AVCodec**, AVCodecID) in hlsoutputstream.o
"_av_write_trailer", referenced from:
HLSOutputStream::close() in hlsoutputstream.o
"VResampler::~VResampler()", referenced from:
BufferedResamplerImpl<VResampler>::~BufferedResamplerImpl() in wmadd.o
resample(WavData const&, int) in wmget.o
"_av_frame_free", referenced from:
HLSOutputStream::close_stream() in hlsoutputstream.o
"_avcodec_receive_packet", referenced from:
HLSOutputStream::write_audio_frame(Error&) in hlsoutputstream.o
"Resampler::Resampler()", referenced from:
BufferedResamplerImpl<Resampler>::BufferedResamplerImpl(int, int, int) in wmadd.o
resample(WavData const&, int) in wmget.o
"_mpg123_new", referenced from:
MP3InputStream::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
MP3InputStream::detect(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mp3inputstream.o
"VResampler::setup(double, unsigned int, unsigned int)", referenced from:
create_resampler(int, int, int) in wmadd.o
resample(WavData const&, int) in wmget.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Since you've installed this using brew you are trying to link against libraries built for the Mac. You need to build those libraries for iOS. Note this will typically involve making a fat binary of the different architectures you'll need per library. You can easily test this for fftw and see if the linker errors disappear. Here are some references to build or download a pre-built version.
https://github.com/godock/fftw-build
In theory once you link up against the iOS version, you should see errors like
_fftwf_plan_dft_r2c_1d", referenced from:
fftar_float(unsigned long, float*, float*) in fft.o
_fftwf_free", referenced from:
free_array_float(float*) in fft.o
disappear. You can also pick another one of your libraries to replace with the iOS version to test. For example ffmpeg build instructions can be found here.
https://github.com/kewlbear/FFmpeg-iOS-build-script
You'll unfortunately have to hunt down how to build them all.
This question already has answers here:
What is an undefined reference/unresolved external symbol error and how do I fix it?
(39 answers)
Compiling a C++ program with GCC
(9 answers)
Closed 3 years ago.
I'm trying to compile a C++ helloWorld in terminal.
#include <iostream>
using namespace std;
int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
I cd to the directory containing the code. I manage to compile with the command g++ -o hello c_helloworld.cpp. But when I use the command gcc -o hello c_helloworld.cpp I get the following error.
Undefined symbols for architecture x86_64: "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced
from:
std::__1::ctype const& std::__1::use_facet >(std::__1::locale const&)
in c_helloworld-a3d3b8.o "std::__1::ios_base::getloc() const",
referenced from:
std::__1::basic_ios >::widen(char) const in c_helloworld-a3d3b8.o "std::__1::basic_string,
std::__1::allocator >::__init(unsigned long, char)", referenced
from:
std::__1::basic_string, std::__1::allocator >::basic_string(unsigned long, char) in
c_helloworld-a3d3b8.o "std::__1::basic_string, std::__1::allocator
::~basic_string()", referenced from:
std::__1::ostreambuf_iterator > std::__1::__pad_and_output >(std::__1::ostreambuf_iterator >, char const*, char const*, char const*, std::__1::ios_base&, char) in
c_helloworld-a3d3b8.o "std::__1::basic_ostream >::put(char)", referenced from:
std::__1::basic_ostream >& std::__1::endl
(std::__1::basic_ostream >&) in c_helloworld-a3d3b8.o "std::__1::basic_ostream >::flush()", referenced from:
std::__1::basic_ostream >& std::__1::endl
(std::__1::basic_ostream >&) in c_helloworld-a3d3b8.o "std::__1::basic_ostream
::sentry::sentry(std::__1::basic_ostream >&)", referenced from:
std::__1::basic_ostream >& std::__1::__put_character_sequence
(std::__1::basic_ostream >&, char const*, unsigned long) in c_helloworld-a3d3b8.o
"std::__1::basic_ostream
::sentry::~sentry()", referenced from:
std::__1::basic_ostream >& std::__1::__put_character_sequence
(std::__1::basic_ostream >&, char const*, unsigned long) in c_helloworld-a3d3b8.o "std::__1::cout",
referenced from:
_main in c_helloworld-a3d3b8.o "std::__1::ctype::id", referenced from:
std::__1::ctype const& std::__1::use_facet >(std::__1::locale const&)
in c_helloworld-a3d3b8.o "std::__1::locale::~locale()", referenced
from:
std::__1::basic_ios >::widen(char) const in c_helloworld-a3d3b8.o "std::__1::ios_base::__set_badbit_and_consider_rethrow()", referenced
from:
std::__1::basic_ostream >& std::__1::__put_character_sequence
(std::__1::basic_ostream >&, char const*, unsigned long) in c_helloworld-a3d3b8.o
"std::__1::ios_base::clear(unsigned int)", referenced from:
std::__1::ios_base::setstate(unsigned int) in c_helloworld-a3d3b8.o "std::terminate()", referenced from:
___clang_call_terminate in c_helloworld-a3d3b8.o "___cxa_begin_catch", referenced from:
std::__1::basic_ostream >& std::__1::__put_character_sequence
(std::__1::basic_ostream >&, char const*, unsigned long) in c_helloworld-a3d3b8.o
___clang_call_terminate in c_helloworld-a3d3b8.o "___cxa_call_unexpected", referenced from:
std::__1::ostreambuf_iterator >::ostreambuf_iterator(std::__1::basic_ostream >&) in c_helloworld-a3d3b8.o
"___cxa_end_catch", referenced from:
std::__1::basic_ostream >& std::__1::__put_character_sequence
(std::__1::basic_ostream >&, char const*, unsigned long) in c_helloworld-a3d3b8.o
"___gxx_personality_v0", referenced from:
std::__1::basic_ostream >& std::__1::__put_character_sequence
(std::__1::basic_ostream >&, char const*, unsigned long) in c_helloworld-a3d3b8.o
std::__1::ostreambuf_iterator > std::__1::__pad_and_output >(std::__1::ostreambuf_iterator >, char const*, char const*, char const*, std::__1::ios_base&, char) in
c_helloworld-a3d3b8.o
std::__1::ostreambuf_iterator >::ostreambuf_iterator(std::__1::basic_ostream >&) in c_helloworld-a3d3b8.o
std::__1::basic_ios >::widen(char) const in c_helloworld-a3d3b8.o
Dwarf Exception Unwind Info (__eh_frame) in c_helloworld-a3d3b8.o ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see
invocation)
gcc is used to compile C programs (by default), g++ is for C++.
So, the behaviour is expected.
By default, gcc links to the standard C library.
If you want to compile C++ programs you can link to the standard C++ library by adding the following option:
gcc -o hello c_helloworld.cpp -lstdc++
PS. I suggest you to search the website before asking a question, there was already an answer for this.
Compiling a C++ program with gcc
Using g++ is easier for compiling .cpp files. Execute the compiled code by running ./outputfile in the directory. So basically that would be running
g++ file.cpp -o file && ./file
in the command line
Edit: My mistake.. gcc can be used here as well, but it's simpler to just use g++
So the plan for this project is to have a QT library that can be used in a native SDK.
We have done a mock library that when imported in a QT App buit into a xcodeproj works without issues.
The library is static, running lipo -info returns x86_64 arm64.
I used the tutorial from https://alediaferia.com/2014/12/18/a-native-ios-app-with-a-qt-third-party-library/ but got stuck. After a bit of digging I got to the step where linking occurs this is the result:
Undefined symbols for architecture arm64:
"_pcre2_match_16", referenced from:
safe_pcre2_match_16(pcre2_real_code_16 const*, unsigned short const*, int, int, int, pcre2_real_match_data_16*, pcre2_real_match_context_16*) in libQt5Core.a(qregularexpression.o)
"_pcre2_match_context_create_16", referenced from:
QRegularExpressionPrivate::doMatch(QString const&, int, int, int, QRegularExpression::MatchType, QFlags<QRegularExpression::MatchOption>, QRegularExpressionPrivate::CheckSubjectStringOption, QRegularExpressionMatchPrivate const*) const in libQt5Core.a(qregularexpression.o)
"_pcre2_jit_stack_assign_16", referenced from:
QRegularExpressionPrivate::doMatch(QString const&, int, int, int, QRegularExpression::MatchType, QFlags<QRegularExpression::MatchOption>, QRegularExpressionPrivate::CheckSubjectStringOption, QRegularExpressionMatchPrivate const*) const in libQt5Core.a(qregularexpression.o)
"_pcre2_jit_stack_free_16", referenced from:
QThreadStorage<QPcreJitStackPointer*>::deleteData(void*) in libQt5Core.a(qregularexpression.o)
"_pcre2_get_ovector_pointer_16", referenced from:
QRegularExpressionPrivate::doMatch(QString const&, int, int, int, QRegularExpression::MatchType, QFlags<QRegularExpression::MatchOption>, QRegularExpressionPrivate::CheckSubjectStringOption, QRegularExpressionMatchPrivate const*) const in libQt5Core.a(qregularexpression.o)
"_pcre2_match_data_free_16", referenced from:
QRegularExpressionPrivate::doMatch(QString const&, int, int, int, QRegularExpression::MatchType, QFlags<QRegularExpression::MatchOption>, QRegularExpressionPrivate::CheckSubjectStringOption, QRegularExpressionMatchPrivate const*) const in libQt5Core.a(qregularexpression.o)
"_pcre2_config_16", referenced from:
QRegularExpressionPrivate::getPatternInfo() in libQt5Core.a(qregularexpression.o)
"_pcre2_pattern_info_16", referenced from:
QRegularExpressionPrivate::getPatternInfo() in libQt5Core.a(qregularexpression.o)
QRegularExpressionPrivate::doMatch(QString const&, int, int, int, QRegularExpression::MatchType, QFlags<QRegularExpression::MatchOption>, QRegularExpressionPrivate::CheckSubjectStringOption, QRegularExpressionMatchPrivate const*) const in libQt5Core.a(qregularexpression.o)
"_pcre2_jit_compile_16", referenced from:
QRegularExpressionPrivate::optimizePattern() in libQt5Core.a(qregularexpression.o)
"_pcre2_match_context_free_16", referenced from:
QRegularExpressionPrivate::doMatch(QString const&, int, int, int, QRegularExpression::MatchType, QFlags<QRegularExpression::MatchOption>, QRegularExpressionPrivate::CheckSubjectStringOption, QRegularExpressionMatchPrivate const*) const in libQt5Core.a(qregularexpression.o)
"_pcre2_compile_16", referenced from:
QRegularExpressionPrivate::compilePattern() in libQt5Core.a(qregularexpression.o)
"_pcre2_code_free_16", referenced from:
QRegularExpressionPrivate::~QRegularExpressionPrivate() in libQt5Core.a(qregularexpression.o)
QRegularExpressionPrivate::compilePattern() in libQt5Core.a(qregularexpression.o)
"_pcre2_jit_stack_create_16", referenced from:
safe_pcre2_match_16(pcre2_real_code_16 const*, unsigned short const*, int, int, int, pcre2_real_match_data_16*, pcre2_real_match_context_16*) in libQt5Core.a(qregularexpression.o)
"_pcre2_match_data_create_from_pattern_16", referenced from:
QRegularExpressionPrivate::doMatch(QString const&, int, int, int, QRegularExpression::MatchType, QFlags<QRegularExpression::MatchOption>, QRegularExpressionPrivate::CheckSubjectStringOption, QRegularExpressionMatchPrivate const*) const in libQt5Core.a(qregularexpression.o)
"_uncompress", referenced from:
qUncompress(unsigned char const*, int) in libQt5Core.a(qbytearray.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
How the project looks:
Does anyone know what is going on?
You're missing the linking to libqtpcre2
Add
-lqtpcre2
into your "OTHER LINKER FLAGS" in xcode's "build settings"
So I have a mini OpenGL project that I am doing in C++ in Xcode. I am using several libraries including the SOIL and GLEW libraries, their respective header files, and the SDL2, OpenGL, and Corefoundation frameworks. The project builds just fine in Xcode with the following compiler options: C++ Language Dialect set to -std=c++11 and C++ Standard Library set to libc++. However, when I try to build this project with clang on the command line, with the following command:
clang++ -stdlib=libc++ -std=c++11
-I/usr/local/include/SOIL/src
-I/usr/local/include/glm/glm
-I/usr/local/include/glew-1.10.0/include/
-framework SDL2
-framework CoreFoundation
-framework OpenGL
-L/usr/local/include/glew-1.10.0/lib/
-L/usr/local/lib
main.cpp euchre.cpp euchre.h (These 3 files are in the same directory)
I get the following errors:
Undefined symbols for architecture x86_64:
"_SOIL_free_image_data", referenced from:
Euchre::MakeObject::LoadTexture(char const*, int) in euchre-d6b330.o
"_SOIL_load_image", referenced from:
Euchre::MakeObject::LoadTexture(char const*, int) in euchre-d6b330.o
"___glewActiveTexture", referenced from:
Euchre::MakeObject::LoadTexture(char const*, int) in euchre-d6b330.o
"___glewAttachShader", referenced from:
Euchre::MakeObject::LoadShaders(char const*, char const*) in euchre-d6b330.o
"___glewBindBuffer", referenced from:
Euchre::MakeObject::makeAttribute(unsigned int, char const*, unsigned int, unsigned int, int, unsigned int, unsigned char, int, void const*) in euchre-d6b330.o
unsigned int Euchre::MakeObject::makeBufferObject<float>(int, unsigned int, unsigned int, std::__1::vector<float, std::__1::allocator<float> >) in euchre-d6b330.o
unsigned int Euchre::MakeObject::makeBufferObject<unsigned int>(int, unsigned int, unsigned int, std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >) in euchre-d6b330.o
"___glewBindVertexArray", referenced from:
_main in main-6799fc.o
"___glewBufferData", referenced from:
unsigned int Euchre::MakeObject::makeBufferObject<float>(int, unsigned int, unsigned int, std::__1::vector<float, std::__1::allocator<float> >) in euchre-d6b330.o
unsigned int Euchre::MakeObject::makeBufferObject<unsigned int>(int, unsigned int, unsigned int, std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >) in euchre-d6b330.o
"___glewCompileShader", referenced from:
Euchre::MakeObject::compileShader(unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in euchre-d6b330.o
"___glewCreateProgram", referenced from:
Euchre::MakeObject::LoadShaders(char const*, char const*) in euchre-d6b330.o
"___glewCreateShader", referenced from:
Euchre::MakeObject::LoadShaders(char const*, char const*) in euchre-d6b330.o
"___glewDeleteBuffers", referenced from:
_main in main-6799fc.o
"___glewDeleteProgram", referenced from:
_main in main-6799fc.o
"___glewDeleteShader", referenced from:
Euchre::MakeObject::LoadShaders(char const*, char const*) in euchre-d6b330.o
"___glewDeleteVertexArrays", referenced from:
_main in main-6799fc.o
"___glewEnableVertexAttribArray", referenced from:
Euchre::MakeObject::makeAttribute(unsigned int, char const*, unsigned int, unsigned int, int, unsigned int, unsigned char, int, void const*) in euchre-d6b330.o
"___glewGenBuffers", referenced from:
unsigned int Euchre::MakeObject::makeBufferObject<float>(int, unsigned int, unsigned int, std::__1::vector<float, std::__1::allocator<float> >) in euchre-d6b330.o
unsigned int Euchre::MakeObject::makeBufferObject<unsigned int>(int, unsigned int, unsigned int, std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >) in euchre-d6b330.o
"___glewGenVertexArrays", referenced from:
Euchre::MakeObject::makeVertexArrayObject(int) in euchre-d6b330.o
"___glewGetAttribLocation", referenced from:
Euchre::MakeObject::makeAttribute(unsigned int, char const*, unsigned int, unsigned int, int, unsigned int, unsigned char, int, void const*) in euchre-d6b330.o
"___glewGetShaderiv", referenced from:
Euchre::MakeObject::compileShader(unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in euchre-d6b330.o
"___glewLinkProgram", referenced from:
Euchre::MakeObject::LoadShaders(char const*, char const*) in euchre-d6b330.o
"___glewShaderSource", referenced from:
Euchre::MakeObject::compileShader(unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in euchre-d6b330.o
"___glewUseProgram", referenced from:
_main in main-6799fc.o
"___glewVertexAttribPointer", referenced from:
Euchre::MakeObject::makeAttribute(unsigned int, char const*, unsigned int, unsigned int, int, unsigned int, unsigned char, int, void const*) in euchre-d6b330.o
"_glewExperimental", referenced from:
_main in main-6799fc.o
"_glewInit", referenced from:
_main in main-6799fc.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
What I don't understand is how I am compiling with the same settings as on Xcode, but in terminal, I can't get this to work.