Opened 8 years ago

Last modified 5 years ago

#11182 new Bugs

Iostreams can't find symbol only on OSX

Reported by: a.santini@… Owned by: Jonathan Turkanis
Milestone: To Be Determined Component: iostreams
Version: Boost 1.57.0 Severity: Problem
Keywords: Cc:

Description

System: Darwin Kernel Version 14.3.0

Compiler: GCC 4.9

Boost version: Tried with 1.55, 1.57, 1.58-beta, boost-trunk of today

Minimal example:

#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/stream.hpp>

int main () {
  boost::iostreams::stream<boost::iostreams::file_descriptor> fdstream;
  return 0;
}

Outcome:

$ /usr/local/bin/g++-4.9 -I /opt/boost/include/ -L /opt/boost/lib/ -lboost_iostreams -o foo foo.cpp
Undefined symbols for architecture x86_64:
  "boost::iostreams::file_descriptor::seek(long, std::_Ios_Seekdir)", referenced from:
      std::fpos<__mbstate_t> boost::iostreams::detail::seek_device_impl<boost::iostreams::any_tag>::seek<boost::iostreams::file_descriptor>(boost::iostreams::file_descriptor&, long, std::_Ios_Seekdir, std::_Ios_Openmode) in ccr82hhn.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

Change History (3)

comment:1 by anonymous, 7 years ago

boost stable 1.59.0 – the problem still persists

comment:2 by Andreas F. Borchert, 6 years ago

This is a typical problem of a library being compiled with clang++ but then linked to objects generated by g++. This fails in case of the boost libraries. If you want to use them with g++, you have to compile them using g++. (Note that "brew install boost" delivers you a boost library compiled by clang++.)

comment:3 by Joel, 5 years ago

I encountered this error on macOS, after installing Boost 1.66.0 using brew install boost. Since this by default links to clang compiler, switch to gcc and reinstall using brew install boost --cc=g++-7, substituting for your gcc. This took quite a while, so let brew do it's thing.

Note: See TracTickets for help on using tickets.