#463 closed defect (fixed)
GEOS 3.3.0 does not compile on OS X 10.7 with clang
Reported by: | vince | Owned by: | pramsey |
---|---|---|---|
Priority: | major | Milestone: | 3.3.1 |
Component: | Build/Install | Version: | 3.3.0 |
Severity: | Critical | Keywords: | clang macos |
Cc: |
Description
GEOS 3.3.0 fails for different reasons on OS X 10.7 (Lion). With clang, this is a cast problem:
../../include/geos/geom/GeometryFactory.h:323:14: error: no matching conversion for functional-style cast from 'geos::geom::GeometryCollection *' to 'std::auto_ptr<Geometry>' return std::auto_ptr<Geometry>( createGeometryCollection() ); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/4.2.1/memory:189:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::GeometryCollection *' to 'element_type *' (aka 'geos::geom::Geometry *') auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { } ^ /usr/include/c++/4.2.1/memory:198:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::GeometryCollection *' to 'std::auto_ptr<geos::geom::Geometry> &' auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { } ^ /usr/include/c++/4.2.1/memory:348:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::GeometryCollection *' to 'auto_ptr_ref<element_type>' auto_ptr(auto_ptr_ref<element_type> __ref) throw() ^ /usr/include/c++/4.2.1/memory:211:9: note: candidate template ignored: failed template argument deduction auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { } ^ In file included from ConvexHull.cpp:23: ../../include/geos/geom/GeometryFactory.h:346:14: error: no matching conversion for functional-style cast from 'geos::geom::GeometryCollection *' to 'std::auto_ptr<Geometry>' return std::auto_ptr<Geometry>( createGeometryCollection(fromGeoms) ); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/4.2.1/memory:189:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::GeometryCollection *' to 'element_type *' (aka 'geos::geom::Geometry *') auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { } ^ /usr/include/c++/4.2.1/memory:198:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::GeometryCollection *' to 'std::auto_ptr<geos::geom::Geometry> &' auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { } ^ /usr/include/c++/4.2.1/memory:348:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::GeometryCollection *' to 'auto_ptr_ref<element_type>' auto_ptr(auto_ptr_ref<element_type> __ref) throw() ^ /usr/include/c++/4.2.1/memory:211:9: note: candidate template ignored: failed template argument deduction auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { } ^ In file included from ConvexHull.cpp:23: ../../include/geos/geom/GeometryFactory.h:351:14: error: no matching conversion for functional-style cast from 'geos::geom::MultiPolygon *' to 'std::auto_ptr<Geometry>' return std::auto_ptr<Geometry>( createMultiPolygon(fromGeoms) ); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/4.2.1/memory:189:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::MultiPolygon *' to 'element_type *' (aka 'geos::geom::Geometry *') auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { } ^ /usr/include/c++/4.2.1/memory:198:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::MultiPolygon *' to 'std::auto_ptr<geos::geom::Geometry> &' auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { } ^ /usr/include/c++/4.2.1/memory:348:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::MultiPolygon *' to 'auto_ptr_ref<element_type>' auto_ptr(auto_ptr_ref<element_type> __ref) throw() ^ /usr/include/c++/4.2.1/memory:211:9: note: candidate template ignored: failed template argument deduction auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { } ^ In file included from ConvexHull.cpp:23: ../../include/geos/geom/GeometryFactory.h:353:14: error: no matching conversion for functional-style cast from 'geos::geom::MultiLineString *' to 'std::auto_ptr<Geometry>' return std::auto_ptr<Geometry>( createMultiLineString(fromGeoms) ); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/4.2.1/memory:189:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::MultiLineString *' to 'element_type *' (aka 'geos::geom::Geometry *') auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { } ^ /usr/include/c++/4.2.1/memory:198:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::MultiLineString *' to 'std::auto_ptr<geos::geom::Geometry> &' auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { } ^ /usr/include/c++/4.2.1/memory:348:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::MultiLineString *' to 'auto_ptr_ref<element_type>' auto_ptr(auto_ptr_ref<element_type> __ref) throw() ^ /usr/include/c++/4.2.1/memory:211:9: note: candidate template ignored: failed template argument deduction auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { } ^ In file included from ConvexHull.cpp:23: ../../include/geos/geom/GeometryFactory.h:355:14: error: no matching conversion for functional-style cast from 'geos::geom::MultiPoint *' to 'std::auto_ptr<Geometry>' return std::auto_ptr<Geometry>( createMultiPoint(fromGeoms) ); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/4.2.1/memory:189:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::MultiPoint *' to 'element_type *' (aka 'geos::geom::Geometry *') auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { } ^ /usr/include/c++/4.2.1/memory:198:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::MultiPoint *' to 'std::auto_ptr<geos::geom::Geometry> &' auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { } ^ /usr/include/c++/4.2.1/memory:348:7: note: candidate constructor not viable: cannot convert argument of incomplete type 'geos::geom::MultiPoint *' to 'auto_ptr_ref<element_type>' auto_ptr(auto_ptr_ref<element_type> __ref) throw() ^ /usr/include/c++/4.2.1/memory:211:9: note: candidate template ignored: failed template argument deduction auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { } ^ 5 errors generated.
whereas with llvm-gcc, it seems a method is missing when generating the dynamic library:
Undefined symbols for architecture x86_64: "__ZNSt8auto_ptrIN4geos4geom8EnvelopeEEcvSt12auto_ptr_refIT_EIS2_EEv", referenced from: virtual thunk to geos::geom::GeometryCollection::computeEnvelopeInternal() constin GeometryCollection.o "std::auto_ptr<geos::geom::Envelope>::auto_ptr(std::auto_ptr_ref<geos::geom::Envelope>)", referenced from: virtual thunk to geos::geom::GeometryCollection::computeEnvelopeInternal() constin GeometryCollection.o ld: symbol(s) not found for architecture x86_64 collect2: ld returned 1 exit status
Attachments (1)
Change History (13)
comment:1 by , 13 years ago
by , 13 years ago
comment:3 by , 13 years ago
Pull down this patch and configure with
./configure CC=/usr/bin/clang CXX=/usr/bin/clang++ make make install
comment:4 by , 13 years ago
It's odd that the include lines alone didn't fix the build. Do you confirm they didn't ?
I wouldn't expect a dynamic_cast to be required for upcasts, once the inheritance chain is known.
comment:5 by , 13 years ago
I'll tweak this a bit to try to get rid of the casts. I agree they are not desired, but I thought it might be something that is only related to clang.
comment:6 by , 13 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Great! At least for me it works. It spits warnings about struct being defined as class, but nothing more serious. Thanks for this patch, I am going to commit it right away into Macports.
comment:7 by , 13 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
Oops. I forgot there remains the llvm-gcc case, though (same error with the old Apple gcc4.2)
comment:8 by , 13 years ago
Let Sandro (strk) target and close tickets, as he is coordinating GEOS development.
I will make another patch attempt without the casts shortly.
comment:9 by , 13 years ago
Sandro Santilli ? Well, I then postpone the Macports commit until I could test your second patch. Thanks again, Vincent
comment:11 by , 13 years ago
Keywords: | llvm-gcc removed |
---|---|
Resolution: | → fixed |
Status: | reopened → closed |
Summary: | GEOS 3.3.0 does not compile on OS X 10.7, neither with clang nor with llvm-gcc → GEOS 3.3.0 does not compile on OS X 10.7 with clang |
Backported in r3471. Please file another ticket for llvm-gcc
comment:12 by , 13 years ago
Ok, I'll do that. Meanwhile I will commit the updated patch into Macports and force a change from llvm-gcc4.2 to clang. Thanks for the patch again, the solution was simple, but I wasn’t able to figure it out.
PS : this supersedes #462 that I could not retrieve in the base.