[pdal] Minimum Boost, embedded Boost, and undefined symbols

Howard Butler hobu.inc at gmail.com
Mon Mar 26 12:32:06 EDT 2012


On Mar 26, 2012, at 11:01 AM, Bradley Chambers wrote:

> I found two previous tickets stating that the minimum Boost version should be 1.41 (https://github.com/PDAL/PDAL/issues/51 and https://github.com/PDAL/PDAL/pull/55), and yet the main CMakeLists file requires 1.48 (references to 1.41 disappeared around https://github.com/PDAL/PDAL/commit/41b3b39d85c073a7325d03bf853477c71f37a05c). Should the CMakeLists file be downgraded once again to require 1.41?
> 
> I believe the embedded PDAL Boost may be taking over a bit too gracefully if the initial find_package call fails. I discovered this when attempting to run CMake with Boost 1.47 (before noticing the dependency on 1.48). Because the embedded package took over, and CMake completed without errors, this took a while to figure out. In hindsight, there was a status message that Boost was not found, and embedded Boost would be used, but it's easy to overlook. If the user chooses to not use embedded Boost, should the default behavior really be to use it if CMake runs into any issues?

There's definitely room to fix the CMake logic up here.  I just did a quick and dirty on it, and I almost always build embedded now. I think the expectation should be that you're building embedded to simplify the build setup for folks and so that we can dictate a high boost version number.  Right now the minimum Boost version number is 1.48, which is due to some newish boost::random being used in filters.stats.  

> 
> Finally, when building on OS X and using the embedded Boost libraries, I currently get a slew of errors about undefined symbols in Boost::filesystem3.

If you were using the embedded boost, I think the errors here would be pdalboost::filesystem3:: of boost::filesystem3 

$ make VERBOSE=1 should give you an indication of the include path ordering and whether or not your boost is being used ahead of the system one.  When the embedded boost is used, a single library that is built by CMake in ./boost is linked in.  Otherwise, for a system boost, each individual library specified in the find_package invocation is required.

> 
> Undefined symbols for architecture x86_64:
>   "boost::filesystem3::detail::remove(boost::filesystem3::path const&, boost::system::error_code*)", referenced from:
>       boost::filesystem3::remove(boost::filesystem3::path const&) in FileUtils.o
>   "boost::filesystem3::detail::rename(boost::filesystem3::path const&, boost::filesystem3::path const&, boost::system::error_code*)", referenced from:
>       boost::filesystem3::rename(boost::filesystem3::path const&, boost::filesystem3::path const&) in FileUtils.o
>   "boost::filesystem3::detail::status(boost::filesystem3::path const&, boost::system::error_code*)", referenced from:
>       boost::filesystem3::exists(boost::filesystem3::path const&) in FileUtils.o
>   "boost::filesystem3::detail::file_size(boost::filesystem3::path const&, boost::system::error_code*)", referenced from:
>       boost::filesystem3::file_size(boost::filesystem3::path const&) in FileUtils.o
>   "boost::filesystem3::detail::current_path(boost::system::error_code*)", referenced from:
>       boost::filesystem3::current_path() in FileUtils.o
>   "boost::filesystem3::absolute(boost::filesystem3::path const&, boost::filesystem3::path const&)", referenced from:
>       pdal::FileUtils::toAbsolutePath(std::string const&) in FileUtils.o
>       pdal::FileUtils::toAbsolutePath(std::string const&, std::string) in FileUtils.o
>   "boost::filesystem3::path::parent_path() const", referenced from:
>       pdal::FileUtils::getDirectory(std::string const&) in FileUtils.o
>   "boost::filesystem3::path::root_directory() const", referenced from:
>       boost::filesystem3::path::has_root_directory() const in FileUtils.o
>   "boost::filesystem3::path::filename() const", referenced from:
>       pdal::StageFactory::loadPlugins() in StageFactory.o
>   "boost::filesystem3::path::extension() const", referenced from:
>       pdal::StageFactory::loadPlugins() in StageFactory.o
>   "boost::filesystem3::path::stem() const", referenced from:
>       pdal::StageFactory::loadPlugins() in StageFactory.o
>   "boost::filesystem3::directory_entry::m_get_symlink_status(boost::system::error_code*) const", referenced from:
>       boost::filesystem3::directory_entry::symlink_status() const in StageFactory.o
>   "boost::filesystem3::path::begin() const", referenced from:
>       boost::filesystem3::operator<(boost::filesystem3::path const&, boost::filesystem3::path const&) in StageFactory.o
>   "boost::filesystem3::path::end() const", referenced from:
>       boost::filesystem3::operator<(boost::filesystem3::path const&, boost::filesystem3::path const&) in StageFactory.o
>   "boost::filesystem3::path::m_path_iterator_increment(boost::filesystem3::path::iterator&)", referenced from:
>       boost::filesystem3::path::iterator::increment() in StageFactory.o
>   "boost::filesystem3::detail::directory_iterator_increment(boost::filesystem3::directory_iterator&, boost::system::error_code*)", referenced from:
>       boost::filesystem3::directory_iterator::increment() in StageFactory.o
>   "boost::filesystem3::detail::directory_iterator_construct(boost::filesystem3::directory_iterator&, boost::filesystem3::path const&, boost::system::error_code*)", referenced from:
>       boost::filesystem3::directory_iterator::directory_iterator(boost::filesystem3::path const&) in StageFactory.o
>   "boost::filesystem3::detail::dir_itr_close(void*&, void*&)", referenced from:
>       boost::filesystem3::detail::dir_itr_imp::~dir_itr_imp() in StageFactory.o
>   "boost::filesystem3::detail::unique_path(boost::filesystem3::path const&, boost::system::error_code*)", referenced from:
>       boost::filesystem3::unique_path(boost::filesystem3::path const&) in Utils.o
>   "boost::filesystem3::detail::temp_directory_path(boost::system::error_code*)", referenced from:
>       boost::filesystem3::temp_directory_path() in Utils.o
>   "boost::filesystem3::path::operator/=(boost::filesystem3::path const&)", referenced from:
>       boost::filesystem3::operator/(boost::filesystem3::path const&, boost::filesystem3::path const&) in Utils.o
> ld: symbol(s) not found for architecture x86_64
> 
> Brad
> _______________________________________________
> pdal mailing list
> pdal at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/pdal



More information about the pdal mailing list