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

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

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

Bradley Chambers
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?

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.

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
[hidden email]
http://lists.osgeo.org/mailman/listinfo/pdal
Reply | Threaded
Open this post in threaded view
|

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

Howard Butler

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
> [hidden email]
> http://lists.osgeo.org/mailman/listinfo/pdal

_______________________________________________
pdal mailing list
[hidden email]
http://lists.osgeo.org/mailman/listinfo/pdal
Reply | Threaded
Open this post in threaded view
|

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

Bradley Chambers

So I removed the build directory and started fresh. Here's the CMake output.


Setting PDAL build type - Debug

Using embedded boost tree

Using boost lib: pdalboost

Building with PDAL unit tests

No non-embed static boost library found, setting BOOST_TEST_DYN_LINK

Configuring done

Generating done


While linking ../bin/libpdal.dylib, I get the following

Undefined symbols for architecture x86_64:
  "boost::filesystem3::path::root_directory() const", referenced from:
      boost::filesystem3::path::has_root_directory() constin FileUtils.cpp.o

...

make VERBOSE=1 confirms that only PDAL/boost is being included, and that libpdal is linking against libpdalboost.a.

Brad

On Mon, Mar 26, 2012 at 12:32 PM, Howard Butler <[hidden email]> wrote:

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
> [hidden email]
> http://lists.osgeo.org/mailman/listinfo/pdal



_______________________________________________
pdal mailing list
[hidden email]
http://lists.osgeo.org/mailman/listinfo/pdal