Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

scon failure at boost stage #126

Closed
DMGoldberg opened this issue Apr 27, 2012 · 23 comments
Closed

scon failure at boost stage #126

DMGoldberg opened this issue Apr 27, 2012 · 23 comments
Assignees
Labels
build Related to compiling, building, installing

Comments

@DMGoldberg
Copy link

Greetings, all. I haven't seen this problem yet, but hopefully it has an easy fix. I am compiling GalSim on a Mac (10.5.8) using Python 2.7. I installed Boost from source, and tested afterwards with:

otool -L /usr/local/lib/libboost_python.dylib
/usr/local/lib/libboost_python.dylib:
libboost_python.dylib (compatibility version 0.0.0, current version 0.0.0)
/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.5)

which I interpret as a good thing.

However, upon running:

scons FFTW_DIR=/opt/local BOOST_DIR=/usr/local

I get:

scons: Reading SConscript files ...
SCons is version 2.1.0 using python version 2.7.1
Python is from /Library/Frameworks/Python.framework/Versions/2.7/include/python2.7
Using compiler: /usr/bin/g++
compiler version: 4.0.1
Determined that a good number of jobs = 2
Checking for C++ library cfitsio... yes
Checking for C++ library fftw3... yes
Checking for C++ header file boost/shared_ptr.hpp... yes
Checking for C++ header file TMV.h... yes
Using TMV_LINK file: /usr/local/share/tmv/tmv-link
-ltmv -lblas
Checking for correct TMV linkage... (this may take a little while)
Checking for correct TMV linkage... yes
Checking if we can build against Python... yes
Checking if we can build against NumPy... yes
sh: line 1: 40620 Bus error .sconf_temp/conftest_11 > ".sconf_temp/conftest_11.out"
Checking if we can build against Boost.Python... no
Cannot run program built with Boost.Python.

Please fix the above error(s) and rerun scons


which doesn't seem terribly helpful. The bus error is particularly confusing.

I've looked in the config.log file, and while there are a few hints, I'm not sure what to make of them. In particular:

boost::python::converter::as_to_python_function<Foo, boost::python::objects::class_cref_wrapper<Foo, boost::python::objects::make_instance<Foo, boost::python::objects::value_holder > > >::convert(void const*)in conftest_9.o
ld: symbol(s) not found

Though as I'm not an expert in boost, I've no idea what to make of this.

Any suggestions?

Thanks,

Dave

@barnabytprowe
Copy link
Member

Ooops, I deleted a comment then that was mostly nonsense due to a complete misreading of the message. Sorry Dave! (and @TallJimbo )

Alas, my misreading also means that now I have far less idea what the problem might be here, and so I throw the Issue out to the general populace. We are always keen to get more possible build scenarios under our belt.

Would it be possible to post the whole (or at least a chunk around the interesting bits of) the config.log file?

@TallJimbo
Copy link
Member

It'd be most helpful if you could:
A) delete .sconsign.dblite
B) delete config.log
C) try again, and post the new config.log

This failure actually seems familiar, but I can't remember what the problem was last time we saw it (and if it was identical, I'd think we'd have fixed the unhelpful error message). But I am concerned a little about the gcc version; Barney, do you know if we have any confirmed successes with Apple's gcc 4.0? It might be good to start compiling a matrix of platforms / dependency versions we know we've got things working on.

@DMGoldberg
Copy link
Author

Can do. Here you go. Incidentally, I compiled successfully on my home machine, same OS, same versions of the various libraries, same procedure.

Thanks.

Dave


file /Users/goldberg/Downloads/GalSim-developers-GalSim-edd5d8e/SConstruct,line 997:
Configure(confdir = .sconf_temp)
scons: Configure: Checking for C++ library cfitsio...
.sconf_temp/conftest_0.cpp <-
|
|
|#include "fitsio.h"
|
|int
|main() {
|
|return 0;
|}
|
g++ -o .sconf_temp/conftest_0.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -Iinclude -I/opt/local/include -I/usr/local/include .sconf_temp/conftest_0.cpp
g++ -o .sconf_temp/conftest_0 .sconf_temp/conftest_0.o -Llib -L/opt/local/lib -L/usr/local/lib -lcfitsio
scons: Configure: yes

scons: Configure: Checking for C++ library fftw3...
.sconf_temp/conftest_1.cpp <-
|
|
|#include "fftw3.h"
|
|int
|main() {
|
|return 0;
|}
|
g++ -o .sconf_temp/conftest_1.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -Iinclude -I/opt/local/include -I/usr/local/include .sconf_temp/conftest_1.cpp
g++ -o .sconf_temp/conftest_1 .sconf_temp/conftest_1.o -Llib -L/opt/local/lib -L/usr/local/lib -lcfitsio -lfftw3
scons: Configure: yes

scons: Configure: Checking for C++ header file boost/shared_ptr.hpp...
.sconf_temp/conftest_2.cpp <-
|
|#include <boost/shared_ptr.hpp>
|
|
g++ -o .sconf_temp/conftest_2.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -Iinclude -I/opt/local/include -I/usr/local/include .sconf_temp/conftest_2.cpp
scons: Configure: yes

scons: Configure: Checking for C++ header file TMV.h...
.sconf_temp/conftest_3.cpp <-
|
|#include <TMV.h>
|
|
g++ -o .sconf_temp/conftest_3.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -Iinclude -I/opt/local/include -I/usr/local/include .sconf_temp/conftest_3.cpp
scons: Configure: yes

scons: Configure: Checking for correct TMV linkage...
.sconf_temp/conftest_4.cpp <-
|
|#include "TMV_Sym.h"
|int main()
|{
| //tmv::SymMatrix S(10,4.);
| tmv::Matrix S(10,10,4.);
| tmv::Matrix m(10,3,2.);
| tmv::Matrix m2 = m / S;
| return 0;
|}
|
g++ -o .sconf_temp/conftest_4.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -Iinclude -I/opt/local/include -I/usr/local/include .sconf_temp/conftest_4.cpp
.sconf_temp/conftest_5.cpp <-
|
|#include "TMV_Sym.h"
|int main()
|{
| //tmv::SymMatrix S(10,4.);
| tmv::Matrix S(10,10,4.);
| tmv::Matrix m(10,3,2.);
| tmv::Matrix m2 = m / S;
| return 0;
|}
|
g++ -o .sconf_temp/conftest_5.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -Iinclude -I/opt/local/include -I/usr/local/include .sconf_temp/conftest_5.cpp
g++ -o .sconf_temp/conftest_5 .sconf_temp/conftest_5.o -Llib -L/opt/local/lib -L/usr/local/lib -lcfitsio -lfftw3 -ltmv -lblas
scons: Configure: yes

scons: Configure: Checking if we can build against Python...
.sconf_temp/conftest_6.cpp <-
|
|#include "Python.h"
|int main()
|{
| Py_Initialize();
| Py_Finalize();
| return 0;
|}
|
g++ -o .sconf_temp/conftest_6.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -Iinclude -I/opt/local/include -I/usr/local/include -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 .sconf_temp/conftest_6.cpp
g++ -o .sconf_temp/conftest_6 .sconf_temp/conftest_6.o -Llib -L/opt/local/lib -L/usr/local/lib -L/Library/Frameworks/Python.framework/Versions/2.7/lib -lcfitsio -lfftw3 -ltmv -lblas -lpython2.7 -ldl -framework CoreFoundation
.sconf_temp/conftest_6 > .sconf_temp/conftest_6.out
scons: Configure: yes

scons: Configure: Checking if we can build against NumPy...
.sconf_temp/conftest_7.cpp <-
|
|#include "Python.h"
|#include "numpy/arrayobject.h"
|void doImport() {
| import_array();
|}
|int main()
|{
| int result = 0;
| Py_Initialize();
| doImport();
| if (PyErr_Occurred()) {
| result = 1;
| } else {
| npy_intp dims = 2;
| PyObject * a = PyArray_SimpleNew(1, &dims, NPY_INT);
| if (!a) result = 1;
| Py_DECREF(a);
| }
| Py_Finalize();
| return result;
|}
|
g++ -o .sconf_temp/conftest_7.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -Iinclude -I/opt/local/include -I/usr/local/include -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include .sconf_temp/conftest_7.cpp
g++ -o .sconf_temp/conftest_7 .sconf_temp/conftest_7.o -Llib -L/opt/local/lib -L/usr/local/lib -L/Library/Frameworks/Python.framework/Versions/2.7/lib -lcfitsio -lfftw3 -ltmv -lblas -lpython2.7 -ldl -framework CoreFoundation
.sconf_temp/conftest_8.cpp <-
|
|#include "Python.h"
|#include "numpy/arrayobject.h"
|void doImport() {
| import_array();
|}
|int main()
|{
| int result = 0;
| Py_Initialize();
| doImport();
| if (PyErr_Occurred()) {
| result = 1;
| } else {
| npy_intp dims = 2;
| PyObject * a = PyArray_SimpleNew(1, &dims, NPY_INT);
| if (!a) result = 1;
| Py_DECREF(a);
| }
| Py_Finalize();
| return result;
|}
|
g++ -o .sconf_temp/conftest_8.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -Iinclude -I/opt/local/include -I/usr/local/include -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include .sconf_temp/conftest_8.cpp
g++ -o .sconf_temp/conftest_8 .sconf_temp/conftest_8.o -Llib -L/opt/local/lib -L/usr/local/lib -L/Library/Frameworks/Python.framework/Versions/2.7/lib -lcfitsio -lfftw3 -ltmv -lblas -lpython2.7 -ldl -framework CoreFoundation
.sconf_temp/conftest_8 > .sconf_temp/conftest_8.out
scons: Configure: yes

scons: Configure: Checking if we can build against Boost.Python...
.sconf_temp/conftest_9.cpp <-
|
|#include "boost/python.hpp"
|
|class Foo { public: Foo() {} };
|
|int main()
|{
| Py_Initialize();
| boost::python::object obj;
| boost::python::class_< Foo >("Foo", boost::python::init<>());
| Py_Finalize();
| return 0;
|}
|
g++ -o .sconf_temp/conftest_9.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -Iinclude -I/opt/local/include -I/usr/local/include -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include .sconf_temp/conftest_9.cpp
g++ -o .sconf_temp/conftest_9 .sconf_temp/conftest_9.o -Llib -L/opt/local/lib -L/usr/local/lib -L/Library/Frameworks/Python.framework/Versions/2.7/lib -lcfitsio -lfftw3 -ltmv -lblas -lpython2.7 -ldl -framework CoreFoundation
Undefined symbols:
"boost::python::instance_holder::deallocate(object, void_)", referenced from:
boost::python::objects::make_holder<0>::applyboost::python::objects::value_holder<Foo, boost::mpl::vector0<mpl_::na> >::execute(object)in conftest_9.o
"boost::python::objects::copy_class_object(boost::python::type_info const&, boost::python::type_info const&)", referenced from:
main in conftest_9.o
"boost::python::objects::py_function_impl_base::~py_function_impl_base()", referenced from:
boost::python::objects::caller_py_function_impl<boost::python::detail::caller<void (
)(object), boost::python::default_call_policies, boost::mpl::vector2<void, object> > >::~caller_py_function_impl()in conftest_9.o
boost::python::objects::caller_py_function_impl<boost::python::detail::caller<void ()(_object), boost::python::default_call_policies, boost::mpl::vector2<void, object*> > >::~caller_py_function_impl()in conftest_9.o
"boost::python::converter::shared_ptr_deleter::operator()(void const
)", referenced from:
boost::detail::sp_counted_impl_pd<void_, boost::python::converter::shared_ptr_deleter>::dispose()in conftest_9.o
boost::python::converter::shared_ptr_from_python::construct(object, boost::python::converter::rvalue_from_python_stage1_data_)in conftest_9.o
"boost::python::objects::class_base::set_instance_size(unsigned long)", referenced from:
main in conftest_9.o
"boost::python::converter::registration::expected_from_python_type() const", referenced from:
boost::python::converter::expected_from_python_type_direct::get_pytype() in conftest_9.o
boost::python::converter::expected_pytype_for_arg<object>::get_pytype() in conftest_9.o
boost::python::converter::expected_pytype_for_arg::get_pytype() in conftest_9.o
"boost::python::throw_error_already_set()", referenced from:
boost::python::converter::shared_ptr_from_python::construct(object, boost::python::converter::rvalue_from_python_stage1_data
)in conftest_9.o
"typeinfo for boost::python::objects::py_function_impl_base", referenced from:
typeinfo for boost::python::objects::caller_py_function_impl<boost::python::detail::caller<void ()(object), boost::python::default_call_policies, boost::mpl::vector2<void, object> > >in conftest_9.o
"boost::python::instance_holder::~instance_holder()", referenced from:
boost::python::objects::value_holder::~value_holder()in conftest_9.o
boost::python::objects::value_holder::~value_holder()in conftest_9.o
"boost::python::converter::registry::lookup(boost::python::type_info)", referenced from:
static_initialization_and_destruction_0(int, int)in conftest_9.o
"boost::python::converter::registry::insert(object* ()(void const
), boost::python::type_info, typeobject const* ()())", referenced from:
boost::python::to_python_converter<Foo, boost::python::objects::class_cref_wrapper<Foo, boost::python::objects::make_instance<Foo, boost::python::objects::value_holder > >, true>::to_python_converter()in conftest_9.o
"boost::python::converter::registry::query(boost::python::type_info)", referenced from:
boost::python::converter::expected_pytype_for_arg<object>::get_pytype() in conftest_9.o
boost::python::converter::expected_pytype_for_arg::get_pytype() in conftest_9.o
"boost::python::objects::find_static_type(void
, boost::python::type_info, boost::python::type_info)", referenced from:
boost::python::objects::value_holder::holds(boost::python::type_info, bool)in conftest_9.o
"boost::python::objects::add_to_namespace(boost::python::api::object const&, char const, boost::python::api::object const&, char const*)", referenced from:
void boost::python::class_<Foo, boost::python::detail::not_specified, boost::python::detail::not_specified, boost::python::detail::not_specified>::def_maybe_overloads<boost::python::api::object, char const*>(char const_, boost::python::api::object, char const_ const&, ...)in conftest_9.o
"boost::python::converter::shared_ptr_deleter::shared_ptr_deleter(boost::python::handle<object>)", referenced from:
boost::python::converter::shared_ptr_from_python::construct(object, boost::python::converter::rvalue_from_python_stage1_data
)in conftest_9.o
"boost::python::converter::registry::insert(void* ()(object), void ()(object, boost::python::converter::rvalue_from_python_stage1_data_), boost::python::type_info, typeobject const ()())", referenced from:
main in conftest_9.o
"boost::python::objects::py_function_impl_base::max_arity() const", referenced from:
vtable for boost::python::objects::caller_py_function_impl<boost::python::detail::caller<void (
)(object), boost::python::default_call_policies, boost::mpl::vector2<void, object> > >in conftest_9.o
"boost::python::objects::function_object(boost::python::objects::py_function const&, std::pair<boost::python::detail::keyword const*, boost::python::detail::keyword const*> const&)", referenced from:
boost::python::api::object boost::python::detail::make_function_aux<void ()(_object), boost::python::default_call_policies, boost::mpl::vector2<void, object*>, mpl::int
<0> >(void ()(object), boost::python::default_call_policies const&, boost::mpl::vector2<void, object*> const&, std::pair<boost::python::detail::keyword const*, boost::python::detail::keyword const*> const&, mpl::int<0>)in conftest_9.o
"boost::python::instance_holder::allocate(object*, unsigned long, unsigned long)", referenced from:
boost::python::objects::make_holder<0>::applyboost::python::objects::value_holder<Foo, boost::mpl::vector0<mpl
::na> >::execute(object)in conftest_9.o
"boost::python::objects::class_base::class_base(char const_, unsigned long, boost::python::type_info const_, char const_)", referenced from:
main in conftest_9.o
"boost::python::converter::get_lvalue_from_python(object, boost::python::converter::registration const&)", referenced from:
boost::python::converter::shared_ptr_from_python::convertible(object) in conftest_9.o
"boost::python::converter::shared_ptr_deleter::~shared_ptr_deleter()", referenced from:
boost::python::converter::shared_ptr_from_python::construct(object, boost::python::converter::rvalue_from_python_stage1_data
)in conftest_9.o
boost::python::converter::shared_ptr_from_python::construct(object, boost::python::converter::rvalue_from_python_stage1_data_)in conftest_9.o
boost::python::converter::shared_ptr_from_python::construct(object, boost::python::converter::rvalue_from_python_stage1_data_)in conftest_9.o
boost::python::converter::shared_ptr_from_python::construct(object, boost::python::converter::rvalue_from_python_stage1_data_)in conftest_9.o
boost::detail::sp_counted_impl_pd<void*, boost::python::converter::shared_ptr_deleter>::~sp_counted_impl_pd()in conftest_9.o
boost::detail::sp_counted_impl_pd<void*, boost::python::converter::shared_ptr_deleter>::~sp_counted_impl_pd()in conftest_9.o
"boost::python::instance_holder::instance_holder()", referenced from:
boost::python::objects::make_holder<0>::applyboost::python::objects::value_holder<Foo, boost::mpl::vector0<mpl_::na> >::execute(object)in conftest_9.o
boost::python::objects::class_cref_wrapper<Foo, boost::python::objects::make_instance<Foo, boost::python::objects::value_holder > >::convert(Foo const&)in conftest_9.o
boost::python::converter::as_to_python_function<Foo, boost::python::objects::class_cref_wrapper<Foo, boost::python::objects::make_instance<Foo, boost::python::objects::value_holder > > >::convert(void const_)in conftest_9.o
"boost::python::converter::registration::get_class_object() const", referenced from:
boost::python::objects::class_cref_wrapper<Foo, boost::python::objects::make_instance<Foo, boost::python::objects::value_holder > >::convert(Foo const&)in conftest_9.o
boost::python::converter::as_to_python_function<Foo, boost::python::objects::class_cref_wrapper<Foo, boost::python::objects::make_instance<Foo, boost::python::objects::value_holder > > >::convert(void const_)in conftest_9.o
"typeinfo for boost::python::instance_holder", referenced from:
typeinfo for boost::python::objects::value_holderin conftest_9.o
"boost::python::objects::register_dynamic_id_aux(boost::python::type_info, std::pair<void_, boost::python::type_info> ()(void))", referenced from:
void boost::python::objects::register_dynamic_id(Foo_)in conftest_9.o
"boost::python::detail::gcc_demangle(char const_)", referenced from:
boost::python::detail::signature_arity<1u>::impl<boost::mpl::vector2<void, _object*> >::elements()in conftest_9.o
boost::python::detail::signature_arity<1u>::impl<boost::mpl::vector2<void, _object*> >::elements()in conftest_9.o
boost::python::objects::caller_py_function_impl<boost::python::detail::caller<void ()(_object), boost::python::default_call_policies, boost::mpl::vector2<void, _object*> > >::signature() constin conftest_9.o
boost::python::objects::caller_py_function_impl<boost::python::detail::caller<void ()(_object), boost::python::default_call_policies, boost::mpl::vector2<void, _object*> > >::signature() constin conftest_9.o
boost::python::detail::caller_arity<1u>::impl<void ()(_object), boost::python::default_call_policies, boost::mpl::vector2<void, _object*> >::signature()in conftest_9.o
boost::python::detail::caller_arity<1u>::impl<void ()(_object), boost::python::default_call_policies, boost::mpl::vector2<void, object*> >::signature()in conftest_9.o
"vtable for boost::python::objects::py_function_impl_base", referenced from:
ZTVN5boost6python7objects21py_function_impl_baseE$non_lazy_ptr in conftest_9.o
"boost::python::instance_holder::install(object*)", referenced from:
boost::python::objects::make_holder<0>::applyboost::python::objects::value_holder<Foo, boost::mpl::vector0<mpl
::na> >::execute(object)in conftest_9.o
boost::python::objects::class_cref_wrapper<Foo, boost::python::objects::make_instance<Foo, boost::python::objects::value_holder > >::convert(Foo const&)in conftest_9.o
boost::python::converter::as_to_python_function<Foo, boost::python::objects::class_cref_wrapper<Foo, boost::python::objects::make_instance<Foo, boost::python::objects::value_holder > > >::convert(void const
)in conftest_9.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
.sconf_temp/conftest_10.cpp <-
|
|#include "boost/python.hpp"
|
|class Foo { public: Foo() {} };
|
|int main()
|{
| Py_Initialize();
| boost::python::object obj;
| boost::python::class
< Foo >("Foo", boost::python::init<>());
| Py_Finalize();
| return 0;
|}
|
g++ -o .sconf_temp/conftest_10.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -Iinclude -I/opt/local/include -I/usr/local/include -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include .sconf_temp/conftest_10.cpp
g++ -o .sconf_temp/conftest_10 .sconf_temp/conftest_10.o -Llib -L/opt/local/lib -L/usr/local/lib -L/Library/Frameworks/Python.framework/Versions/2.7/lib -lboost_python -lcfitsio -lfftw3 -ltmv -lblas -lpython2.7 -ldl -framework CoreFoundation
.sconf_temp/conftest_11.cpp <-
|
|#include "boost/python.hpp"
|
|class Foo { public: Foo() {} };
|
|int main()
|{
| Py_Initialize();
| boost::python::object obj;
| boost::python::class
< Foo >("Foo", boost::python::init<>());
| Py_Finalize();
| return 0;
|}
|
g++ -o .sconf_temp/conftest_11.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -Iinclude -I/opt/local/include -I/usr/local/include -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include .sconf_temp/conftest_11.cpp
g++ -o .sconf_temp/conftest_11 .sconf_temp/conftest_11.o -Llib -L/opt/local/lib -L/usr/local/lib -L/Library/Frameworks/Python.framework/Versions/2.7/lib -lboost_python -lcfitsio -lfftw3 -ltmv -lblas -lpython2.7 -ldl -framework CoreFoundation
.sconf_temp/conftest_11 > .sconf_temp/conftest_11.out
scons: Configure: no

@TallJimbo
Copy link
Member

Here's what I can tell so far:

  • All the linker errors in config.log are harmless; that's from an attempt to link the test program without including "boost_python" explicitly in the list of libraries we need to link to. I think we generally expect that to fail, and it appears to do so gracefully in this case. (@rmjarvis, do we need to even try that? It would speed up the configure checks to remove it, and I don't think it will ever succeed.)
  • When we attempt to link the test program and we do include -lboost_python it succeeds, but we get some variety of segmentation fault when we actually try to run the program.

When that's happened in the past, it's sometimes been because the version of some library (probably python2.x or boost_python) found by the runtime linker system (e.g. LD_LIBRARY_PATH) is different from the version picked up by the gcc linker (via -L options), so the versions of the two libraries weren't compatible at runtime. Do you have two versions of Python or Boost on your system?

If you're comfortable running .sconf_temp/conftest_11 in a debugger and can get the segmentation fault traceback, that also might be helpful.

I've also just opened a new issue (#127) to try to revamp how we do these configure checks; if we can't make progress here, that might give us something else to try.

@rmjarvis
Copy link
Member

My general policy is to always try the configuration "as is" before trying to add other things, as you say, expecting it to fail most of the time. The reason for it is in case people add explicit libraries with the EXTRA_LIBS option. If you have a non-standard set up, then you might need to just explicitly tell SCons what to use. In that case, we want to use those libraries rather than the ones that we think should work for normal set ups.

Maybe this isn't really necessary, but I don't think it's a huge time sink to do it that way.

@rmjarvis
Copy link
Member

Also, Dave, do a git pull and rerun scons. I'd had it set to remove the .scon* files to make sure they get remade after an error, but that means they're not around to diagnose problems. So I removed that "feature" (bug).

@barnabytprowe
Copy link
Member

In reply to @TallJimbo, no I don't recall a successful case with gcc4.0. A table of successful/failed build cases is an excellent idea, I'll get working on a spreadsheet we can all share...

@rmjarvis
Copy link
Member

I just tested with g++ 4.0.1 and it worked fine, so I don't think that's the problem.

The only compiler that I've tried which I haven't fully gotten everything to work yet is icpc. It fails to find some stuff at run time when trying to load the galsim library. I think I got it to work by setting LD_LIBRARY_PATH, but that's an inelegant solution. I didn't make an issue for it, but I guess I probably should. It's not the machine I usually use, so it hasn't been high priority for me, and I don't think anyone else is using icpc.

@rmjarvis
Copy link
Member

I spoke too soon. Turns out scons tests failed for 4.0, but I just fixed it.

Dave, another thing that could possibly be the problem is that on my computer the g++-4.0 compiler defaults to compiling 32 bit code, and the python version that comes with the computer is 64 bit, and thus needs 64 bit libraries. If this is true on your computer too, then that could possibly be the problem. (Although for whatever reason, the clash didn't show up on my computer until I ran scons tests, so maybe not.)

Anyway, to check this you could try running:

scons EXTRA_FLAGS=-m64

and see if that works.

@DMGoldberg
Copy link
Author

At Mike's suggestion, I checked out the latest version of of GalSim (GalSim-developers-GalSim-5088ebd.tar). The previous version (GalSim-developers-GalSim-edd5d8e.tar) did not save the .sconf_temp/ directory.

However, now I find that my build fails even earlier, at the TMV stage. I have tried manually including a TMV_DIR flag, but that doesn't seem to be the issue. I should note that I use gcc 4.0.1 both at work and at home (where I compiled successfully). My current log is below.

Thoughts and suggestions are, of course, appreciated.

Dave


file /Users/goldberg/Desktop/GalSim-developers-GalSim-5088ebd/SConstruct,line 1003:
Configure(confdir = .sconf_temp)
scons: Configure: Checking for C++ library cfitsio...
.sconf_temp/conftest_0.cpp <-
|
|
|#include "fitsio.h"
|
|int
|main() {
|
|return 0;
|}
|
g++ -o .sconf_temp/conftest_0.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -m64 -Iinclude -I/usr/local/include -I/opt/local/include .sconf_temp/conftest_0.cpp
g++ -o .sconf_temp/conftest_0 -m64 .sconf_temp/conftest_0.o -Llib -L/usr/local/lib -L/opt/local/lib -lcfitsio
ld warning: in /usr/local/lib/libcfitsio.a, file is not of required architecture
scons: Configure: yes

scons: Configure: Checking for C++ library fftw3...
.sconf_temp/conftest_1.cpp <-
|
|
|#include "fftw3.h"
|
|int
|main() {
|
|return 0;
|}
|
g++ -o .sconf_temp/conftest_1.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -m64 -Iinclude -I/usr/local/include -I/opt/local/include .sconf_temp/conftest_1.cpp
g++ -o .sconf_temp/conftest_1 -m64 .sconf_temp/conftest_1.o -Llib -L/usr/local/lib -L/opt/local/lib -lcfitsio -lfftw3
ld warning: in /usr/local/lib/libcfitsio.a, file is not of required architecture
ld warning: in /opt/local/lib/libfftw3.dylib, file is not of required architecture
scons: Configure: yes

scons: Configure: Checking for C++ header file boost/shared_ptr.hpp...
.sconf_temp/conftest_2.cpp <-
|
|#include <boost/shared_ptr.hpp>
|
|
g++ -o .sconf_temp/conftest_2.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -m64 -Iinclude -I/usr/local/include -I/opt/local/include .sconf_temp/conftest_2.cpp
scons: Configure: yes

scons: Configure: Checking for C++ header file TMV.h...
.sconf_temp/conftest_3.cpp <-
|
|#include <TMV.h>
|
|
g++ -o .sconf_temp/conftest_3.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -m64 -Iinclude -I/usr/local/include -I/opt/local/include .sconf_temp/conftest_3.cpp
scons: Configure: yes

scons: Configure: Checking for correct TMV linkage...
.sconf_temp/conftest_4.cpp <-
|
|#include "TMV_Sym.h"
|int main()
|{
| //tmv::SymMatrix S(10,4.);
| tmv::Matrix S(10,10,4.);
| tmv::Matrix m(10,3,2.);
| tmv::Matrix m2 = m / S;
| return 0;
|}
|
g++ -o .sconf_temp/conftest_4.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -m64 -Iinclude -I/usr/local/include -I/opt/local/include .sconf_temp/conftest_4.cpp
.sconf_temp/conftest_5.cpp <-
|
|#include "TMV_Sym.h"
|int main()
|{
| //tmv::SymMatrix S(10,4.);
| tmv::Matrix S(10,10,4.);
| tmv::Matrix m(10,3,2.);
| tmv::Matrix m2 = m / S;
| return 0;
|}
|
g++ -o .sconf_temp/conftest_5.o -c -O2 -fno-strict-aliasing -g3 -Wall -Werror -m64 -Iinclude -I/usr/local/include -I/opt/local/include .sconf_temp/conftest_5.cpp
g++ -o .sconf_temp/conftest_5 -m64 .sconf_temp/conftest_5.o -Llib -L/usr/local/lib -L/opt/local/lib -lcfitsio -lfftw3 -ltmv -lblas
ld warning: in /usr/local/lib/libcfitsio.a, file is not of required architecture
ld warning: in /opt/local/lib/libfftw3.dylib, file is not of required architecture
ld warning: in /usr/local/lib/libtmv.dylib, file is not of required architecture
Undefined symbols:
"tmv::DivHelperstd::complex::~DivHelper()", referenced from:
construction vtable for tmv::DivHelperstd::complex-in-tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::DivHelperstd::complex-in-tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::DivHelperstd::complex-in-tmv::GenMatrixstd::complexin conftest_5.o
construction vtable for tmv::DivHelperstd::complex-in-tmv::Matrixstd::complex<double, 2>in conftest_5.o
construction vtable for tmv::DivHelperstd::complex-in-tmv::Matrixstd::complex<double, 0>in conftest_5.o
"tmv::GenMatrix::sumAbs2Elements() const", referenced from:
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 0>in conftest_5.o
vtable for tmv::Matrix<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::GenMatrixin conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixView<double, 0>in conftest_5.o
vtable for tmv::MatrixView<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 2>in conftest_5.o
vtable for tmv::Matrix<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::MatrixComposite-in-tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixCompositein conftest_5.o
vtable for tmv::MatrixCompositein conftest_5.o
"tmv::GenMatrixstd::complex::sumAbsElements() const", referenced from:
construction vtable for tmv::GenMatrixstd::complex-in-tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::GenMatrixstd::complexin conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 2>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 0>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 0>in conftest_5.o
"void tmv::MultXMstd::complex(std::complex, tmv::MatrixViewstd::complex<double, 0>)", referenced from:
void tmv::MultXM(double, tmv::MatrixViewstd::complex<double, 0>)in conftest_5.o
"tmv::DivHelperstd::complex::~DivHelper()", referenced from:
tmv::GenMatrixstd::complex::~GenMatrix()in conftest_5.o
tmv::GenMatrixstd::complex::~GenMatrix()in conftest_5.o
tmv::GenMatrixstd::complex::~GenMatrix()in conftest_5.o
"tmv::VectorView<double, 0>::setAllTo(double const&)", referenced from:
tmv::Matrix<double, 0>::setAllTo(double const&)in conftest_5.o
"void tmv::DoCopySameTypestd::complex(tmv::GenMatrixstd::complex const&, tmv::MatrixViewstd::complex<double, 0>)", referenced from:
void tmv::DoCopystd::complex(tmv::GenMatrixstd::complex const&, tmv::MatrixViewstd::complex<double, 0>)in conftest_5.o
"tmv::GenVector::sumElements() const", referenced from:
tmv::GenMatrix::trace() constin conftest_5.o
"tmv::MatrixViewstd::complex<double, 0>::conjugateSelf()", referenced from:
void tmv::Copystd::complex<double, std::complex >(tmv::GenMatrixstd::complex const&, tmv::MatrixViewstd::complex<double, 0>)in conftest_5.o
void tmv::Copystd::complex<double, std::complex >(tmv::GenMatrixstd::complex const&, tmv::MatrixViewstd::complex<double, 0>)in conftest_5.o
void tmv::Copy<double, std::complex >(tmv::GenMatrix const&, tmv::MatrixViewstd::complex<double, 0>)in conftest_5.o
void tmv::Copy<double, std::complex >(tmv::GenMatrix const&, tmv::MatrixViewstd::complex<double, 0>)in conftest_5.o
"tmv::GenMatrix::sumAbsElements() const", referenced from:
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 0>in conftest_5.o
vtable for tmv::Matrix<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::GenMatrixin conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixView<double, 0>in conftest_5.o
vtable for tmv::MatrixView<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 2>in conftest_5.o
vtable for tmv::Matrix<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::MatrixComposite-in-tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixCompositein conftest_5.o
vtable for tmv::MatrixCompositein conftest_5.o
"tmv::GenMatrix::maxAbsElement() const", referenced from:
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 0>in conftest_5.o
vtable for tmv::Matrix<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::GenMatrixin conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixView<double, 0>in conftest_5.o
vtable for tmv::MatrixView<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 2>in conftest_5.o
vtable for tmv::Matrix<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::MatrixComposite-in-tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixCompositein conftest_5.o
vtable for tmv::MatrixCompositein conftest_5.o
"tmv::GenMatrix::normSq(double) const", referenced from:
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 0>in conftest_5.o
vtable for tmv::Matrix<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::GenMatrixin conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixView<double, 0>in conftest_5.o
vtable for tmv::MatrixView<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 2>in conftest_5.o
vtable for tmv::Matrix<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::MatrixComposite-in-tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixCompositein conftest_5.o
vtable for tmv::MatrixCompositein conftest_5.o
"tmv::VectorView<double, 0>::conjugateSelf()", referenced from:
void tmv::Copy<double, double>(tmv::GenVector const&, tmv::VectorView<double, 0>)in conftest_5.o
void tmv::Copy<double, double>(tmv::GenVector const&, tmv::VectorView<double, 0>)in conftest_5.o
"tmv::MatrixView<double, 0>::transposeSelf()", referenced from:
void tmv::Copy<double, double>(tmv::GenMatrix const&, tmv::MatrixView<double, 0>)in conftest_5.o
"tmv::GenMatrixstd::complex::normF() const", referenced from:
construction vtable for tmv::GenMatrixstd::complex-in-tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::GenMatrixstd::complexin conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 2>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 0>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 0>in conftest_5.o
"tmv::GenMatrix::sumElements() const", referenced from:
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 0>in conftest_5.o
vtable for tmv::Matrix<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::GenMatrixin conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixView<double, 0>in conftest_5.o
vtable for tmv::MatrixView<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 2>in conftest_5.o
vtable for tmv::Matrix<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::MatrixComposite-in-tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixCompositein conftest_5.o
vtable for tmv::MatrixCompositein conftest_5.o
"void tmv::DoCopySameType(tmv::GenVector const&, tmv::VectorView<double, 0>)", referenced from:
void tmv::DoCopy(tmv::GenVector const&, tmv::VectorView<double, 0>)in conftest_5.o
"tmv::MatrixComposite::cptr() const", referenced from:
construction vtable for tmv::MatrixComposite-in-tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::MatrixCompositein conftest_5.o
"tmv::GenMatrixstd::complex::normSq(double) const", referenced from:
construction vtable for tmv::GenMatrixstd::complex-in-tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::GenMatrixstd::complexin conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 2>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 0>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 0>in conftest_5.o
"tmv::GenMatrix::norm1() const", referenced from:
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 0>in conftest_5.o
vtable for tmv::Matrix<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::GenMatrixin conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixView<double, 0>in conftest_5.o
vtable for tmv::MatrixView<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 2>in conftest_5.o
vtable for tmv::Matrix<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::MatrixComposite-in-tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixCompositein conftest_5.o
vtable for tmv::MatrixCompositein conftest_5.o
tmv::GenMatrix::normInf() constin conftest_5.o
"tmv::DivHelper::doNorm2() const", referenced from:
tmv::DivHelper::norm2() constin conftest_5.o
"tmv::GenMatrixstd::complex::maxAbsElement() const", referenced from:
construction vtable for tmv::GenMatrixstd::complex-in-tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::GenMatrixstd::complexin conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 2>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 0>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 0>in conftest_5.o
"tmv::GenMatrix::doNorm2() const", referenced from:
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 0>in conftest_5.o
vtable for tmv::Matrix<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::GenMatrixin conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixView<double, 0>in conftest_5.o
vtable for tmv::MatrixView<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 2>in conftest_5.o
vtable for tmv::Matrix<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::MatrixComposite-in-tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixCompositein conftest_5.o
vtable for tmv::MatrixCompositein conftest_5.o
"tmv::MatrixView<double, 0>::conjugateSelf()", referenced from:
void tmv::Copy<double, double>(tmv::GenMatrix const&, tmv::MatrixView<double, 0>)in conftest_5.o
void tmv::Copy<double, double>(tmv::GenMatrix const&, tmv::MatrixView<double, 0>)in conftest_5.o
"virtual thunk to tmv::DivHelperstd::complex::~DivHelper()", referenced from:
construction vtable for tmv::DivHelperstd::complex-in-tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::DivHelperstd::complex-in-tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::DivHelperstd::complex-in-tmv::GenMatrixstd::complexin conftest_5.o
construction vtable for tmv::DivHelperstd::complex-in-tmv::Matrixstd::complex<double, 2>in conftest_5.o
construction vtable for tmv::DivHelperstd::complex-in-tmv::Matrixstd::complex<double, 0>in conftest_5.o
"tmv::GenMatrixstd::complex::logDet(std::complex) const", referenced from:
construction vtable for tmv::GenMatrixstd::complex-in-tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::GenMatrixstd::complexin conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 2>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 0>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 0>in conftest_5.o
"virtual thunk to tmv::DivHelperstd::complex::~DivHelper()", referenced from:
construction vtable for tmv::DivHelperstd::complex-in-tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::DivHelperstd::complex-in-tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::DivHelperstd::complex-in-tmv::GenMatrixstd::complexin conftest_5.o
construction vtable for tmv::DivHelperstd::complex-in-tmv::Matrixstd::complex<double, 2>in conftest_5.o
construction vtable for tmv::DivHelperstd::complex-in-tmv::Matrixstd::complex<double, 0>in conftest_5.o
"tmv::GenMatrixstd::complex::det() const", referenced from:
construction vtable for tmv::GenMatrixstd::complex-in-tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::GenMatrixstd::complexin conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 2>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 0>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 0>in conftest_5.o
"tmv::DivHelperstd::complex::divIsSet() const", referenced from:
tmv::DivHelperstd::complex::norm2() constin conftest_5.o
tmv::GenMatrixstd::complex::norm2() constin conftest_5.o
"tmv::GenMatrixstd::complex::maxAbs2Element() const", referenced from:
construction vtable for tmv::GenMatrixstd::complex-in-tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::GenMatrixstd::complexin conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 2>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 0>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 0>in conftest_5.o
"tmv::GenMatrix::setDiv() const", referenced from:
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 0>in conftest_5.o
vtable for tmv::Matrix<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::GenMatrixin conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixView<double, 0>in conftest_5.o
vtable for tmv::MatrixView<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 2>in conftest_5.o
vtable for tmv::Matrix<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::MatrixComposite-in-tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixCompositein conftest_5.o
vtable for tmv::MatrixCompositein conftest_5.o
"tmv::GenMatrixstd::complex::norm1() const", referenced from:
construction vtable for tmv::GenMatrixstd::complex-in-tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::GenMatrixstd::complexin conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 2>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 0>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 0>in conftest_5.o
tmv::GenMatrixstd::complex::normInf() constin conftest_5.o
"tmv::MatrixComposite::stepi() const", referenced from:
construction vtable for tmv::MatrixComposite-in-tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::MatrixCompositein conftest_5.o
"void tmv::MultXM(double, tmv::MatrixView<double, 0>)", referenced from:
tmv::QuotMM<double, double, double>::assignToM(tmv::MatrixView<double, 0>) constin conftest_5.o
"tmv::GenVectorstd::complex::cref(long) const", referenced from:
vtable for tmv::VectorViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::ConstVectorViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::GenVectorstd::complexin conftest_5.o
"tmv::GenMatrix::maxAbs2Element() const", referenced from:
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 0>in conftest_5.o
vtable for tmv::Matrix<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::GenMatrixin conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixView<double, 0>in conftest_5.o
vtable for tmv::MatrixView<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 2>in conftest_5.o
vtable for tmv::Matrix<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::MatrixComposite-in-tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixCompositein conftest_5.o
vtable for tmv::MatrixCompositein conftest_5.o
"tmv::GenVectorstd::complex::sumElements() const", referenced from:
tmv::GenMatrixstd::complex::trace() constin conftest_5.o
"void tmv::DoCopySameType(tmv::GenMatrix const&, tmv::MatrixView<double, 0>)", referenced from:
void tmv::DoCopy(tmv::GenMatrix const&, tmv::MatrixView<double, 0>)in conftest_5.o
"tmv::MatrixComposite::ls() const", referenced from:
construction vtable for tmv::MatrixComposite-in-tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::MatrixCompositein conftest_5.o
"tmv::GenMatrix::cref(long, long) const", referenced from:
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixView<double, 0>in conftest_5.o
vtable for tmv::GenMatrixin conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixView<double, 0>in conftest_5.o
vtable for tmv::MatrixView<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::Matrix<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::MatrixComposite-in-tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::QuotMM<double, double, double>in conftest_5.o
construction vtable for tmv::GenMatrix-in-tmv::MatrixCompositein conftest_5.o
vtable for tmv::MatrixCompositein conftest_5.o
"tmv::MatrixComposite::stepj() const", referenced from:
construction vtable for tmv::MatrixComposite-in-tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::QuotMM<double, double, double>in conftest_5.o
vtable for tmv::MatrixCompositein conftest_5.o
"tmv::GenMatrixstd::complex::write(tmv::TMV_Writer const&) const", referenced from:
construction vtable for tmv::GenMatrixstd::complex-in-tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::MatrixViewstd::complex<double, 0>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::ConstMatrixViewstd::complex<double, 0>in conftest_5.o
vtable for tmv::GenMatrixstd::complexin conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 2>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 2>in conftest_5.o
construction vtable for tmv::GenMatrixstd::complex-in-tmv::Matrixstd::complex<double, 0>in conftest_5.o
vtable for tmv::Matrixstd::complex<double, 0>in conftest_5.o
"tmv::DivHelperstd::complex::doNorm2() const", referenced from:
tmv::DivHelperstd::complex

@rmjarvis
Copy link
Member

Well, to get the TMV stuff to work, you'd want to do the same thing (scons EXTRA_FLAGS=-m64) when installing that. But I suspect that's probably just wrong, since it can't find 64 bit versions of cfitsio or fftw either. So I suspect you probably do have a 32 bit machine.

I did find a tricky way to check if your python is running as a 32- or 64-bit application. Type in the command line:

python -c "import sys;print('%x'%sys.maxint)"

And post what it says. (Specifically, we're looking for how many f's there are.)

@DMGoldberg
Copy link
Author

There are 7:
7fffffff
(which I presume means 32 bits).

But I believe that my machine at home (which successfully compiled and
ran GalSim) also has a 32 bit version of Python, despite the fact that
both machines are 64 bit. I use 32 bit Python for compatibility with
another package (visual, or VPython). If you think it will help, I
certainly could download and compile against a 64 bit python. Though,
as I said, it wouldn't explain why I didn't encounter any problems on my
other machine.

Dave

On 4/30/12 1:13 PM, Mike Jarvis wrote:

Well, to get the TMV stuff to work, you'd want to do the same thing (scons EXTRA_FLAGS=-m64) when installing that. But I suspect that's probably just wrong, since it can't find 64 bit versions of cfitsio or fftw either. So I suspect you probably do have a 32 bit machine.

I did find a tricky way to check if your python is running as a 32- or 64-bit application. Type in the command line:

python -c "import sys;print('%x'%sys.maxint)"

And post what it says. (Specifically, we're looking for how many f's there are.)


Reply to this email directly or view it on GitHub:
#126 (comment)

Dave Goldberg, Ph.D.
Associate Professor, Director of Undergraduate Studies
Drexel University Department of Physics
"A User's Guide to the Universe" (Wiley, 2010)
"The Universe in the Rearview Mirror" (Dutton, 2013)
http://www.usersguidetotheuniverse.com

@rmjarvis
Copy link
Member

Yes. 32 bit. So that means my -m64 idea won't work. You should remove it either by removing the line from gs_scons.conf or running scons EXTRA_LIBS="".

But that also means we're back to square one. So please run scons again, which should now get past the TMV stuff and probably fail at the same place it originally failed. Then post the output of the last .out file that scons makes. (It will probably still be .sconf_temp/conftest_11.out as it was in your earlier config.log output.) Maybe that will provide a clue.

You can also run .sconf_temp/conftest_11 directly on the command line as see what the output is directly. Sometimes it is more helpful to run it that way. And as Jim suggested, if you can run it through gdb and get a backtrace, that would be helpful too.

@DMGoldberg
Copy link
Author

Just an FYI, the line needs to be removed by hand. For some reason,
putting in the EXTRA_LIBS=' ' did not have the desired effect.

But at any rate, it worked, sort of. The problem is that I still get
the bus error (either running it by hand or in the natural course of
events) before any output is sent to conftest_11. The file is empty.

Dave

On 4/30/12 1:32 PM, Mike Jarvis wrote:

Yes. 32 bit. So that means my -m64 idea won't work. You should remove it either by removing the line from gs_scons.conf or running "scons EXTRA_LIBS='').

But that also means we're back to square one. So please run scons again, which should now get past the TMV stuff and probably fail at the same place it originally failed. Then post the output of the last .out file that scons makes? (It will probably still be .sconf_temp/conftest_11.out as it was in your earlier config.log output.) Maybe that will provide a clue.

You can also run .sconf_temp/conftest_11 directly on the command line as see what the output is directly. Sometimes it is more helpful to run it that way. And as Jim suggested, if you can run it through gdb and get a backtrace, that would be helpful too.


Reply to this email directly or view it on GitHub:
#126 (comment)

Dave Goldberg, Ph.D.
Associate Professor, Director of Undergraduate Studies
Drexel University Department of Physics
"A User's Guide to the Universe" (Wiley, 2010)
"The Universe in the Rearview Mirror" (Dutton, 2013)
http://www.usersguidetotheuniverse.com

@TallJimbo
Copy link
Member

Thanks for the update. I don't know that I'll be able to make much progress on this until I've tried to implement #127, and even that is a bit of a shot in the dark. And unfortunately, I'm traveling this week and won't have much time to put into that. Hopefully this isn't too much of a blocker for you.

@rmjarvis
Copy link
Member

Ah. Because I mistyped. It should have been scons EXTRA_FLAGS="".

Anyway, can you try the following now:

gdb .sconf_temp/conftest_11
run
bt

@DMGoldberg
Copy link
Author

Rather than send you the (extremely lengthy) output, below is the post
"bt" output:

arning: Could not find object file
"/private/tmp/_py/_bld/python/libpython2.7.a(xxsubtype.o)" - no debug
information available for
"/Users/sysadmin/build/v2.7.3/Modules/xxsubtype.c".

..... done

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x0000000c
0x0138e99e in PyObject_Call ()
(gdb) bt
#0 0x0138e99e in PyObject_Call ()
#1 0x0144428e in PyEval_CallObjectWithKeywords ()
#2 0x0138e960 in PyObject_CallObject ()
#3 0x01400563 in mro_internal ()
#4 0x013fdceb in PyType_Ready ()
#5 0x000930f3 in boost::python::objects::class_type () at
libs/python/src/object/class.cpp:475
#6 0x00094bbe in boost::python::handle<_typeobject>::release () at
handle.hpp:561
#7 0x00094bbe in boost::python::objects::(anonymous
namespace)::new_class (name=0x3733 "Foo", num_types=1, types=0xbfffef30,
doc=0x0) at libs/python/src/object/class.cpp:563
#8 0x00093be3 in boost::python::objects::class_base::class_base
(this=0xbfffef20, name=0x0, num_types=0, types=0xbfffef30, doc=0x0) at
libs/python/src/object/class.cpp:591
gdb stack crawl at point of internal error:
[ 0 ] /usr/libexec/gdb/gdb-i386-apple-darwin (align_down+0x0) [0x1222d8]
[ 1 ] /usr/libexec/gdb/gdb-i386-apple-darwin (macro_bcache_free+0x60)
[0x7d014]
[ 2 ] /usr/libexec/gdb/gdb-i386-apple-darwin
(macro_tree_delete_value+0x44) [0x7d3f3]
[ 3 ] /usr/libexec/gdb/gdb-i386-apple-darwin (splay_tree_insert+0x64)
[0x1f8f97]
[ 4 ] /usr/libexec/gdb/gdb-i386-apple-darwin (process_die+0x779) [0xd11ff]
[ 5 ] /usr/libexec/gdb/gdb-i386-apple-darwin
(process_full_comp_unit+0xfc) [0xd203e]
[ 6 ] /usr/libexec/gdb/gdb-i386-apple-darwin
(dwarf2_debug_map_psymtab_to_symtab+0x90c) [0xd3351]
[ 7 ] /usr/libexec/gdb/gdb-i386-apple-darwin (psymtab_to_symtab+0x6f)
[0x5122a]
[ 8 ] /usr/libexec/gdb/gdb-i386-apple-darwin (find_pc_sect_symtab+0x3c0)
[0x4c7fa]
[ 9 ] /usr/libexec/gdb/gdb-i386-apple-darwin
(update_tmp_frame_stack+0x12b) [0x6dc5a]
[ 10 ] /usr/libexec/gdb/gdb-i386-apple-darwin
(inlined_frame_sniffer+0xbc) [0x70712]
[ 11 ] /usr/libexec/gdb/gdb-i386-apple-darwin
(frame_unwind_find_by_frame+0x57) [0x129c41]
[ 12 ] /usr/libexec/gdb/gdb-i386-apple-darwin (get_frame_type+0x23)
[0x126af3]
/SourceCache/gdb/gdb-967/src/gdb/macrotab.c:129: internal-error:
macro_bcache_free: Assertion `! t->bcache' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) y

On 4/30/12 1:47 PM, Mike Jarvis wrote:

gdb .sconf_temp/conftest_11

Dave Goldberg, Ph.D.
Associate Professor, Director of Undergraduate Studies
Drexel University Department of Physics
"A User's Guide to the Universe" (Wiley, 2010)
"The Universe in the Rearview Mirror" (Dutton, 2013)
http://www.usersguidetotheuniverse.com

@rmjarvis
Copy link
Member

Wow. You managed to find a bug in gdb. That's always fun.

I'm afraid I don't know what to try next. It doesn't look like an LD_LIBRARY_PATH problem. But just for grins, can you post what echo $LD_LIBRARY_PATH gives? And also otool -L .sconf_temp/conftest_11?

@TallJimbo
Copy link
Member

One little red flag (which may be a red herring) is the mention of "libpython2.7.a" at the top of that gdb output. If we're somehow linking against a static library instead of a shared library, that could be responsible.

Do you have a libpython2.7.dylib or a libpython2.7.a, or both? Mike's otool request may also give us some information on that question.

@DMGoldberg
Copy link
Author

I checked and:
/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib
does, indeed appear in the library directory.

Mike,

I don't currently have my LD_LIBRARY_PATH variable set, but my otool yields:
[mimas\goldberg] otool -L .sconf_temp/conftest_11
.sconf_temp/conftest_11:
libboost_python.dylib (compatibility version 0.0.0, current version
0.0.0)
/opt/local/lib/libfftw3.3.dylib (compatibility version 6.0.0,
current version 6.4.0)
/usr/local/lib/libtmv.0.dylib (compatibility version 0.70.0,
current version 0.71.0)

/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
(compatibility version 1.0.0, current version 218.0.0)
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/Python
(compatibility version 2.7.0, current version 2.7.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
version 111.1.5)

/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
(compatibility version 150.0.0, current version 476.19.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current
version 7.4.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current
version 1.0.0)

Hmm....
The Python library is being linked against
/opt/local/Library/Frameworks... (not /Library/Frameworks...), which is
a different version -- and the one against which I built boost. I have
no idea where this is being set. I've even set LD_LIBRARY_PATH to the
/Library/Frameworks.../lib directory and it produces the same problem.

Dave

On 4/30/12 2:25 PM, Jim Bosch wrote:

One little red flag (which may be a red herring) is the mention of "libpython2.7.a" at the top of that gdb output. If we're somehow linking against a static library instead of a shared library, that could be responsible.

Do you have a libpython2.7.dylib or a libpython2.7.a, or both? Mike's otool request may also give us some information on that question.


Reply to this email directly or view it on GitHub:
#126 (comment)

Dave Goldberg, Ph.D.
Associate Professor, Director of Undergraduate Studies
Drexel University Department of Physics
"A User's Guide to the Universe" (Wiley, 2010)
"The Universe in the Rearview Mirror" (Dutton, 2013)
http://www.usersguidetotheuniverse.com

@rmjarvis
Copy link
Member

rmjarvis commented May 7, 2012

Looking through your config.log and the otool output, my best guess is that you have either a boost, numpy or python library in /opt/local/lib that is linking with the python library in /opt/local/Library.../Python. And since you told SCons to look there for fftw3, the linking step finds the wrong whatever library there as well.

So my recommendation is to install your fftw3 stuff in a different directory so that SCons doesn't have to look in /opt/local/lib. e.g. just copy the fftw3 header files and libraries into the normal /usr/local/lib. Then you can remove the FFTW_DIR line from your gs_scons.conf file and see if that helps.

@ghost ghost assigned rmjarvis May 7, 2012
@DMGoldberg
Copy link
Author

Outstanding. We're all good now.

Thanks for all of your help.

Dave

On 5/6/12 11:10 PM, Mike Jarvis wrote:

Looking through your config.log and the otool output, my best guess is that you have either a boost, numpy or python library in /opt/local/lib that is linking with the python library in /opt/local/Library.../Python. And since you told SCons to look there for fftw3, the linking step finds the wrong whatever library there as well.

So my recommendation is to install your fftw3 stuff in a different directory so that SCons doesn't have to look in /opt/local/lib. e.g. just copy the fftw3 header files and libraries into the normal /usr/local/lib. Then you can remove the FFTW_DIR line from your gs_scons.conf file and see if that helps.


Reply to this email directly or view it on GitHub:
#126 (comment)

Dave Goldberg, Ph.D.
Associate Professor, Director of Undergraduate Studies
Drexel University Department of Physics
"A User's Guide to the Universe" (Wiley, 2010)
"The Universe in the Rearview Mirror" (Dutton, 2013)
http://www.usersguidetotheuniverse.com

@rmjarvis
Copy link
Member

rmjarvis commented May 7, 2012

Good. I'll close this issue then. Not sure if there's anything to pull out of here to put in the Install FAQ.

It's probably a fairly particular issue for your setup, but if you can think of something that you might have wanted to read there to help you figure out the problem, please feel free to add an entry about this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
build Related to compiling, building, installing
Projects
None yet
Development

No branches or pull requests

4 participants