Hi Wes, Here is the shell transcript [1], I ran it with your patch included, and it's still not resolved.
[1] https://gist.github.com/keithgchapman/b3e9ee2df2d2a3e6d6efde1f2b6c6d89 Regards, Keith. http://keith-chapman.com On Wed, Feb 22, 2017 at 1:14 PM, Wes McKinney <wesmck...@gmail.com> wrote: > Thanks, this is helpful. The shared library 3rd-party dependencies are > not being properly linked in the executables. It seems (?) it could > depend on the CMake version. For example, on my system (Ubuntu 14.04) > with > > $ cmake --version > cmake version 2.8.12.2 > > with $CC and $CXX set and > > cmake .. -DPARQUET_ARROW=on -DCMAKE_BUILD_TYPE=release > -DPARQUET_BUILD_TESTS=off > > I have the linker command for parquet-scan: > > Linking CXX executable ../release/parquet-scan > cd /home/wesm/code/parquet-cpp/test-build/tools && /usr/bin/cmake -E > cmake_link_script CMakeFiles/parquet-scan.dir/link.txt --verbose=1 > ccache /home/wesm/code/native-toolchain/build/gcc-4.9.2/bin/g++ > -O3 -g -std=c++11 -Wall -fno-strict-aliasing -fvisibility=hidden > -fvisibility-inlines-hidden -O3 -DNDEBUG > CMakeFiles/parquet-scan.dir/parquet-scan.cc.o -o > ../release/parquet-scan -rdynamic /usr/lib/libsnappy.a > /home/wesm/code/native-toolchain/build/thrift-0.9.0-p2/lib/libthrift.a > ../release/libparquet.a /usr/lib/libsnappy.a > /home/wesm/code/native-toolchain/build/thrift-0.9.0-p2/lib/libthrift.a > /home/wesm/local/lib/libarrow.so /home/wesm/local/lib/libarrow_io.so > /home/wesm/code/native-toolchain/build/boost-1.57.0/lib/libboost_regex.so > /home/wesm/local/lib/libbrotlidec.a > /home/wesm/local/lib/libbrotlienc.a > /home/wesm/local/lib/libbrotlicommon.a > ../zlib_ep/src/zlib_ep-install/lib/libz.a > -Wl,-rpath,/home/wesm/local/lib:/home/wesm/code/native- > toolchain/build/boost-1.57.0/lib > > Here you can see all the link requirements for using libparquet.a have > been included > > To unblock yourself, I suggest passing > > -DPARQUET_BUILD_EXECUTABLES=off > > I'll open a blocker JIRA for 1.0.0 > (https://issues.apache.org/jira/browse/PARQUET-892) until we figure > out what's going on. Since I can't reproduce this can you run another > build with > > make VERBOSE=1 > > so I can see all the linker commands? Please also build with only one > thread. Thanks > > I'm going to put up a patch quickly for you to try. Will ping you on GitHub > > - Wes > > On Wed, Feb 22, 2017 at 3:24 PM, Keith Chapman <keithgchap...@gmail.com> > wrote: > > Hi Wes, > > > > You can find the shell transcript here [1]. > > > > [1] https://gist.github.com/keithgchapman/ee2ce6f27868f532d7c0dfceaae874 > ed > > > > Regards, > > Keith. > > > > http://keith-chapman.com > > > > On Wed, Feb 22, 2017 at 12:14 PM, Keith Chapman <keithgchap...@gmail.com > > > > wrote: > >> > >> I actually had 2 versions of boost, I built 1.54 once for a different > >> project (which I do not need anymore), I got rid of it and now it picks > up > >> 1.58 but still gives the same error. Will upload a complete shell > >> transcript. > >> > >> Regards, > >> Keith. > >> > >> http://keith-chapman.com > >> > >> On Wed, Feb 22, 2017 at 12:04 PM, Wes McKinney <wesmck...@gmail.com> > >> wrote: > >>> > >>> How did you build Boost? If you could upload a complete shell > >>> transcript starting from a clean git clone (run "git clean -fdx ." in > >>> your clone) to GitHub gist or someplace else I can take a closer look. > >>> Ubuntu 16.04 claims to be shipping Boost 1.58, so you may need to set > >>> a different $BOOST_ROOT or update your Boost. > >>> > >>> https://launchpad.net/ubuntu/xenial/+package/libboost-dev > >>> > >>> On Wed, Feb 22, 2017 at 3:02 PM, Keith Chapman < > keithgchap...@gmail.com> > >>> wrote: > >>> > Interestingly if I build with the following (instead of having > >>> > -DCMAKE_CXX_COMPILER=g++-4.9 -DCMAKE_C_COMPILER=gcc-4.9) > >>> > > >>> > export CC="gcc-4.9" > >>> > export CXX="g++-4.9" > >>> > cmake .. -DCMAKE_BUILD_TYPE=release -DPARQUET_BUILD_TESTS=Off > >>> > > >>> > I get rid of the arrow related linkage errors and end up with only > >>> > boost > >>> > related ones. Cmake shows that I have boost 1.54 and I'm building on > >>> > Ubuntu > >>> > 16.04 > >>> > > >>> > [ 94%] Linking CXX executable ../release/parquet-scan > >>> > ../release/libparquet.a(metadata.cc.o): In function > >>> > `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char > >>> > const*, > >>> > std::string>, > >>> > std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char > >>> > const*, > >>> > std::string> > >, boost::regex_traits<char, > >>> > boost::cpp_regex_traits<char> > > >>> >>::match_match()': > >>> > /usr/local/include/boost/regex/v4/perl_matcher_non_ > recursive.hpp:973: > >>> > undefined reference to > >>> > `boost::match_results<__gnu_cxx::__normal_iterator<char const*, > >>> > std::string>, > >>> > std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char > >>> > const*, > >>> > std::string> > > > >>> >>::maybe_assign(boost::match_results<__gnu_cxx::__normal_ > iterator<char > >>> > const*, std::string>, > >>> > std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char > >>> > const*, > >>> > std::string> > > > const&)' > >>> > ../release/libparquet.a(metadata.cc.o): In function > >>> > `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char > >>> > const*, > >>> > std::string>, > >>> > std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char > >>> > const*, > >>> > std::string> > >, boost::regex_traits<char, > >>> > boost::cpp_regex_traits<char> > > >>> >>::match_prefix()': > >>> > /usr/local/include/boost/regex/v4/perl_matcher_common.hpp:333: > >>> > undefined > >>> > reference to `boost::match_results<__gnu_cxx::__normal_iterator<char > >>> > const*, > >>> > std::string>, > >>> > std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char > >>> > const*, > >>> > std::string> > > > >>> >>::maybe_assign(boost::match_results<__gnu_cxx::__normal_ > iterator<char > >>> > const*, std::string>, > >>> > std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char > >>> > const*, > >>> > std::string> > > > const&)' > >>> > ../release/libparquet.a(metadata.cc.o): In function `perl_matcher': > >>> > /usr/local/include/boost/regex/v4/perl_matcher.hpp:374: undefined > >>> > reference > >>> > to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char > >>> > const*, > >>> > std::string>, > >>> > std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char > >>> > const*, > >>> > std::string> > >, boost::regex_traits<char, > >>> > boost::cpp_regex_traits<char> > > >>> >>::construct_init(boost::basic_regex<char, boost::regex_traits<char, > >>> > boost::cpp_regex_traits<char> > > const&, > >>> > boost::regex_constants::_match_flags)' > >>> > collect2: error: ld returned 1 exit status > >>> > tools/CMakeFiles/parquet-dump-schema.dir/build.make:106: recipe for > >>> > target > >>> > 'release/parquet-dump-schema' failed > >>> > make[2]: *** [release/parquet-dump-schema] Error 1 > >>> > CMakeFiles/Makefile2:716: recipe for target > >>> > 'tools/CMakeFiles/parquet-dump-schema.dir/all' failed > >>> > make[1]: *** [tools/CMakeFiles/parquet-dump-schema.dir/all] Error 2 > >>> > make[1]: *** Waiting for unfinished jobs.... > >>> > > >>> > Regards, > >>> > Keith. > >>> > > >>> > http://keith-chapman.com > >>> > > >>> > On Wed, Feb 22, 2017 at 11:51 AM, Keith Chapman > >>> > <keithgchap...@gmail.com> > >>> > wrote: > >>> >> > >>> >> Yes, I get it on a clean build. > >>> >> > >>> >> Regards, > >>> >> Keith. > >>> >> > >>> >> http://keith-chapman.com > >>> >> > >>> >> On Wed, Feb 22, 2017 at 11:42 AM, Wes McKinney <wesmck...@gmail.com > > > >>> >> wrote: > >>> >>> > >>> >>> Do you get these errors from a clean build (i.e. you've removed all > >>> >>> the artifacts and CMake files from your prior build)? We are > building > >>> >>> in Travis CI with gcc/g++ 4.9 and have not been having any issues: > >>> >>> > >>> >>> > >>> >>> > >>> >>> https://github.com/apache/parquet-cpp/blob/master/ci/ > before_script_travis.sh#L20 > >>> >>> > >>> >>> On Wed, Feb 22, 2017 at 2:28 PM, Keith Chapman > >>> >>> <keithgchap...@gmail.com> > >>> >>> wrote: > >>> >>> > Hi Wes, > >>> >>> > > >>> >>> > Tried the patch and it does the trick, thank you for the prompt > >>> >>> > response. > >>> >>> > Also I noticed another issue, not sure if you'd regard it as a > bug > >>> >>> > or > >>> >>> > not > >>> >>> > but I'll throw it out for your consideration. If I build the > >>> >>> > parquet > >>> >>> > library with > >>> >>> > > >>> >>> > "cmake . -DCMAKE_BUILD_TYPE=release -DPARQUET_BUILD_TESTS=Off" > >>> >>> > everything > >>> >>> > builds fine as expected, but if I build it with "cmake . > >>> >>> > -DCMAKE_BUILD_TYPE=release -DCMAKE_CXX_COMPILER=g++-4.9 > >>> >>> > -DCMAKE_C_COMPILER=gcc-4.9 -DPARQUET_BUILD_TESTS=Off" I end up > with > >>> >>> > a > >>> >>> > bunch > >>> >>> > of linkage errors as follows, > >>> >>> > > >>> >>> > Linking CXX executable ../release/parquet_reader > >>> >>> > ../release/libparquet.a(reader.cc.o): In function > >>> >>> > > >>> >>> > `parquet::DictionaryDecoder<parquet::DataType<(parquet:: > Type::type)6> > >>> >>> > >>> >>> >> >>::SetDict(parquet::Decoder<parquet::DataType<(parquet:: > Type::type)6> > >>> >>> >> >*)': > >>> >>> > > >>> >>> > > >>> >>> > /home/keith/projects/bs/axstreamBigD/external_ > packages/parquetcpp/src/parquet/encoding-internal.h:382: > >>> >>> > undefined reference to `arrow::Status::ToString() const' > >>> >>> > ../release/libparquet.a(reader.cc.o): In function > >>> >>> > > >>> >>> > `parquet::DictionaryDecoder<parquet::DataType<(parquet:: > Type::type)7> > >>> >>> > >>> >>> >> >>::SetDict(parquet::Decoder<parquet::DataType<(parquet:: > Type::type)7> > >>> >>> >> >*)': > >>> >>> > > >>> >>> > > >>> >>> > /home/keith/projects/bs/axstreamBigD/external_ > packages/parquetcpp/src/parquet/encoding-internal.h:402: > >>> >>> > undefined reference to `arrow::Status::ToString() const' > >>> >>> > ../release/libparquet.a(metadata.cc.o): In function > >>> >>> > `boost::re_detail::perl_matcher<__gnu_cxx::__normal_ > iterator<char > >>> >>> > const*, > >>> >>> > std::string>, > >>> >>> > std::allocator<boost::sub_match<__gnu_cxx::__normal_ > iterator<char > >>> >>> > const*, > >>> >>> > std::string> > >, boost::regex_traits<char, > >>> >>> > boost::cpp_regex_traits<char> > > >>> >>> >>::match_match()': > >>> >>> > > >>> >>> > /usr/local/include/boost/regex/v4/perl_matcher_non_ > recursive.hpp:973: > >>> >>> > undefined reference to > >>> >>> > `boost::match_results<__gnu_cxx::__normal_iterator<char const*, > >>> >>> > std::string>, > >>> >>> > std::allocator<boost::sub_match<__gnu_cxx::__normal_ > iterator<char > >>> >>> > const*, > >>> >>> > std::string> > > > >>> >>> > >>> >>> >> >>::maybe_assign(boost::match_results<__gnu_cxx::__normal_ > iterator<char > >>> >>> > const*, std::string>, > >>> >>> > std::allocator<boost::sub_match<__gnu_cxx::__normal_ > iterator<char > >>> >>> > const*, > >>> >>> > std::string> > > > const&)' > >>> >>> > ../release/libparquet.a(metadata.cc.o): In function > >>> >>> > `boost::re_detail::perl_matcher<__gnu_cxx::__normal_ > iterator<char > >>> >>> > const*, > >>> >>> > std::string>, > >>> >>> > std::allocator<boost::sub_match<__gnu_cxx::__normal_ > iterator<char > >>> >>> > const*, > >>> >>> > std::string> > >, boost::regex_traits<char, > >>> >>> > boost::cpp_regex_traits<char> > > >>> >>> >>::match_prefix()': > >>> >>> > /usr/local/include/boost/regex/v4/perl_matcher_common.hpp:333: > >>> >>> > undefined > >>> >>> > reference to > >>> >>> > `boost::match_results<__gnu_cxx::__normal_iterator<char > >>> >>> > const*, std::string>, > >>> >>> > std::allocator<boost::sub_match<__gnu_cxx::__normal_ > iterator<char > >>> >>> > const*, > >>> >>> > std::string> > > > >>> >>> > >>> >>> >> >>::maybe_assign(boost::match_results<__gnu_cxx::__normal_ > iterator<char > >>> >>> > const*, std::string>, > >>> >>> > std::allocator<boost::sub_match<__gnu_cxx::__normal_ > iterator<char > >>> >>> > const*, > >>> >>> > std::string> > > > const&)' > >>> >>> > ../release/libparquet.a(metadata.cc.o): In function > `perl_matcher': > >>> >>> > ..... > >>> >>> > And a lot more > >>> >>> > > >>> >>> > Regards, > >>> >>> > Keith. > >>> >>> > > >>> >>> > http://keith-chapman.com > >>> >>> > > >>> >>> > On Wed, Feb 22, 2017 at 10:57 AM, Wes McKinney > >>> >>> > <wesmck...@gmail.com> > >>> >>> > wrote: > >>> >>> > > >>> >>> >> You can try out this patch if you like: > >>> >>> >> > >>> >>> >> https://github.com/apache/parquet-cpp/pull/258 > >>> >>> >> > >>> >>> >> This should be included in the next 1.0.0 RC > >>> >>> >> > >>> >>> >> On Wed, Feb 22, 2017 at 1:32 PM, Keith Chapman > >>> >>> >> <keithgchap...@gmail.com> > >>> >>> >> wrote: > >>> >>> >> > Thanks Wes. > >>> >>> >> > > >>> >>> >> > Regards, > >>> >>> >> > Keith. > >>> >>> >> > > >>> >>> >> > http://keith-chapman.com > >>> >>> >> > > >>> >>> >> > On Wed, Feb 22, 2017 at 10:30 AM, Wes McKinney > >>> >>> >> > <wesmck...@gmail.com> > >>> >>> >> wrote: > >>> >>> >> >> > >>> >>> >> >> I'm able to reproduce the issue on Ubuntu 14.04 > >>> >>> >> >> > >>> >>> >> >> Linking CXX shared library debug/libparquet.so > >>> >>> >> >> /usr/bin/ld: /usr/lib/libsnappy.a(snappy.o): relocation > >>> >>> >> >> R_X86_64_32S > >>> >>> >> >> against `.rodata' can not be used when making a shared > object; > >>> >>> >> >> recompile with -fPIC > >>> >>> >> >> /usr/lib/libsnappy.a: error adding symbols: Bad value > >>> >>> >> >> collect2: error: ld returned 1 exit status > >>> >>> >> >> > >>> >>> >> >> Patch forthcoming > >>> >>> >> >> > >>> >>> >> >> On Wed, Feb 22, 2017 at 1:29 PM, Keith Chapman > >>> >>> >> >> <keithgchap...@gmail.com > >>> >>> >> > > >>> >>> >> >> wrote: > >>> >>> >> >> > Hi Wes, > >>> >>> >> >> > > >>> >>> >> >> > No I don't have SNAPPY_HOME set. Yes this seems similar to > >>> >>> >> >> > 885 > >>> >>> >> >> > > >>> >>> >> >> > On Feb 22, 2017 10:25 AM, "Wes McKinney" > >>> >>> >> >> > <wesmck...@gmail.com> > >>> >>> >> >> > wrote: > >>> >>> >> >> >> > >>> >>> >> >> >> hi Keith, > >>> >>> >> >> >> > >>> >>> >> >> >> It's not caused by PARQUET-885, but it is the same type of > >>> >>> >> >> >> problem. > >>> >>> >> Do > >>> >>> >> >> >> you have $SNAPPY_HOME set? If you compile your own > >>> >>> >> >> >> thirdparty > >>> >>> >> >> >> libraries, they need to be built with -fPIC to support > >>> >>> >> >> >> static > >>> >>> >> >> >> linking > >>> >>> >> >> >> into a shared library. Otherwise it's easier to let > >>> >>> >> >> >> parquet-cpp > >>> >>> >> >> >> build > >>> >>> >> >> >> its own thirdparty toolchain. Because some Linux > >>> >>> >> >> >> distributions > >>> >>> >> >> >> don't > >>> >>> >> >> >> set -fPIC in their packages, we should make a similar > change > >>> >>> >> >> >> as > >>> >>> >> >> >> PARQUET-885 for Snappy. Looking into it now... > >>> >>> >> >> >> > >>> >>> >> >> >> I'm also going to add a note about this to the README. > >>> >>> >> >> >> > >>> >>> >> >> >> - Wes > >>> >>> >> >> >> > >>> >>> >> >> >> On Wed, Feb 22, 2017 at 1:05 PM, Keith Chapman > >>> >>> >> >> >> <keithgchap...@gmail.com> > >>> >>> >> >> >> wrote: > >>> >>> >> >> >> > Hi, > >>> >>> >> >> >> > > >>> >>> >> >> >> > I'm trying to build master and I get the following > error, > >>> >>> >> >> >> > I > >>> >>> >> >> >> > have > >>> >>> >> the > >>> >>> >> >> >> > .so > >>> >>> >> >> >> > versions of the files as seen below too, Is this > somewhat > >>> >>> >> >> >> > relaped > >>> >>> >> to > >>> >>> >> >> >> > Parquet-885? > >>> >>> >> >> >> > > >>> >>> >> >> >> > ls /usr/lib/x86_64-linux-gnu/libsnappy. > >>> >>> >> >> >> > libsnappy.a libsnappy.so libsnappy.so.1 > >>> >>> >> >> >> > libsnappy.so.1.3.0 > >>> >>> >> >> >> > > >>> >>> >> >> >> > Error seen: > >>> >>> >> >> >> > > >>> >>> >> >> >> > /usr/bin/ld: > >>> >>> >> >> >> > /usr/lib/x86_64-linux-gnu/libsnappy.a(snappy.o): > >>> >>> >> >> >> > relocation > >>> >>> >> >> >> > R_X86_64_32S against `.rodata' can not be used when > making > >>> >>> >> >> >> > a > >>> >>> >> >> >> > shared > >>> >>> >> >> >> > object; > >>> >>> >> >> >> > recompile with -fPIC > >>> >>> >> >> >> > /usr/lib/x86_64-linux-gnu/libsnappy.a: error adding > >>> >>> >> >> >> > symbols: > >>> >>> >> >> >> > Bad > >>> >>> >> >> >> > value > >>> >>> >> >> >> > collect2: error: ld returned 1 exit status > >>> >>> >> >> >> > CMakeFiles/parquet_shared.dir/build.make:115: recipe > for > >>> >>> >> >> >> > target > >>> >>> >> >> >> > 'release/libparquet.so' failed > >>> >>> >> >> >> > make[2]: *** [release/libparquet.so] Error 1 > >>> >>> >> >> >> > CMakeFiles/Makefile2:218: recipe for target > >>> >>> >> >> >> > 'CMakeFiles/parquet_shared.dir/all' failed > >>> >>> >> >> >> > make[1]: *** [CMakeFiles/parquet_shared.dir/all] Error > 2 > >>> >>> >> >> >> > Makefile:138: recipe for target 'all' failed > >>> >>> >> >> >> > make: *** [all] Error 2 > >>> >>> >> >> >> > > >>> >>> >> >> >> > Regards, > >>> >>> >> >> >> > Keith. > >>> >>> >> >> >> > > >>> >>> >> >> >> > http://keith-chapman.com > >>> >>> >> > > >>> >>> >> > > >>> >>> >> > >>> >> > >>> >> > >>> > > >> > >> > > >