From: Scott J. <joh...@ve...> - 2002-09-11 17:50:30
|
Congrats on the forward motion of vxl. As a long-time observer of the IU class libraries I'm impressed. I am attempting to build vxl-1.0-beta2 on MacOS X 10.1.5. The version of gcc is 2.95.2. There is a static unversioned copy of libstdc++ bundled with the compiler. c++ -v Reading specs from /usr/libexec/gcc/darwin/ppc/2.95.2/specs Apple Computer, Inc. version gcc-932.1, based on gcc version 2.95.2 19991024 (r\ elease) First, one minor thing. The README says to build with "ccmake $VXLSRC". I found no ccmake binary after downloading and installing CMake-1.4.3, but "cmake $VXLSRC;make" seems to do the right thing. The build went smooth until linking vcl_test. At that time these symbols were undefined: ___ls__H1Zd_R7ostreamRCt7complex1ZX01_RB0 ___ls__H1Zf_R7ostreamRCt7complex1ZX01_RB0 these are referenced from test_vcl_complex.c, which compiled without warning or error. These symbols are defined in /usr/lib/libstdc++.a, under "S" for "symbol in a section other than those above": nm /usr/lib/libstdc++.a | grep ostream | grep complex 00000504 S ___ls__H1Zd_R7ostreamRCt7complex1ZX01_RB0 000004e4 S ___ls__H1Zf_R7ostreamRCt7complex1ZX01_RB0 00000504 S ___ls__H1Zr_R7ostreamRCt7complex1ZX01_RB0 I also found that vxl_test links without error. Appended below is the --verbose output of the vcl_test link attempt. Anyone have any guess of how to fix this? Scott Johnston ---------------------------------------------------------------------------------------- c++ --verbose vcl_tests.o test_vcl_algorithm.o test_vcl_cctype.o\ test_vcl_cmath.o test_vcl_compiler.o test_vcl_complex.o test_vcl_deque.o test_\ vcl_exception.o test_vcl_fstream.o test_vcl_headers.o test_vcl_iostream.o test_\ vcl_iterator.o test_vcl_list.o test_vcl_map.o test_vcl_multimap.o test_vcl_new.\ o test_vcl_set.o test_vcl_stlfwd.o test_vcl_string.o test_vcl_vector.o test_vcl\ _cstdio.o -L/Users/scott/src/build-vxl-1.0-beta2/lib -lvcl -lm -o vcl_tests Reading specs from /usr/libexec/gcc/darwin/ppc/2.95.2/specs Apple Computer, Inc. version gcc-932.1, based on gcc version 2.95.2 19991024 (r\ elease) /usr/bin/ld -arch ppc -o vcl_tests -dynamic -lcrt1.o -L/Users/scott/src/build-\ vxl-1.0-beta2/lib vcl_tests.o test_vcl_algorithm.o test_vcl_cctype.o test_vcl_c\ math.o test_vcl_compiler.o test_vcl_complex.o test_vcl_deque.o test_vcl_excepti\ on.o test_vcl_fstream.o test_vcl_headers.o test_vcl_iostream.o test_vcl_iterato\ r.o test_vcl_list.o test_vcl_map.o test_vcl_multimap.o test_vcl_new.o test_vcl_\ set.o test_vcl_stlfwd.o test_vcl_string.o test_vcl_vector.o test_vcl_cstdio.o -\ lvcl -lstdc++ -lm -lcc_dynamic -lSystem /usr/bin/ld: Undefined symbols: ___ls__H1Zd_R7ostreamRCt7complex1ZX01_RB0 ___ls__H1Zf_R7ostreamRCt7complex1ZX01_RB0 |
From: Peter V. <Pet...@es...> - 2002-09-11 20:09:38
|
> The build went smooth until linking vcl_test. At that time these symbols were > undefined: > > ___ls__H1Zd_R7ostreamRCt7complex1ZX01_RB0 > ___ls__H1Zf_R7ostreamRCt7complex1ZX01_RB0 These look like "operator<<" (ostream output) functions for complex<double> or so. Use the "c++filt" program which should come with your compiler to "demangle" those into C++ readable form. Your compiler probably needs explicit instantiation of these symbols. Normally, the following should suffice, somewhere in a .cxx file in the directory vcl/Templates: template ostream& operator<< (ostream&, vcl_complex<double> const&); The thing is that this statement is already in vcl/Templates/complex-instances.cxx so probably your compiler does not provide this particular templated function. In that case, and if all else fails, just define that function yourself, e.g.: template <class T> ostream& operator<< (ostream& os, vcl_complex<T> const& c) { return os << c.real() << '+' << c.imag() << 'j'; } or something similar. -- Peter. |
From: Scott J. <joh...@ve...> - 2002-09-12 15:42:57
|
> > The build went smooth until linking vcl_test. At that time these >symbols were >> undefined: >> >> ___ls__H1Zd_R7ostreamRCt7complex1ZX01_RB0 >> ___ls__H1Zf_R7ostreamRCt7complex1ZX01_RB0 > >These look like "operator<<" (ostream output) functions for complex<double> >or so. Use the "c++filt" program which should come with your compiler to >"demangle" those into C++ readable form. Yes, they are (by passing nm output through c++filt): 00000504 S ostream & operator<<<double>(ostream &, complex<double> const &) 000004e4 S ostream & operator<<<float>(ostream &, complex<float> const &) > >Your compiler probably needs explicit instantiation of these symbols. >Normally, the following should suffice, somewhere in a .cxx file in the >directory vcl/Templates: > >template ostream& operator<< (ostream&, vcl_complex<double> const&); > >The thing is that this statement is already in >vcl/Templates/complex-instances.cxx >so probably your compiler does not provide this particular templated function. > >In that case, and if all else fails, just define that function yourself, e.g.: > >template <class T> ostream& operator<< (ostream& os, vcl_complex<T> const& c) >{ > return os << c.real() << '+' << c.imag() << 'j'; >} > >or something similar. It seems like I need to add this. Where should I put it? I tried adding the above, bracketed by "#if defined(__APPLE__)", into vcl/gcc_295/vcl_complex.txx, but that wasn't the right place -- I still have the same undefines (although it did invoke an extensive recompile through dependencies, so it seems that file was included). Scott Johnston |
From: Amitha P. <pe...@cs...> - 2002-09-11 20:42:43
|
On Wed 11 Sep 2002, Scott Johnston wrote: > I am attempting to build vxl-1.0-beta2 on MacOS X 10.1.5. The > version of gcc is > 2.95.2. There is a static unversioned copy of libstdc++ bundled with > the compiler. > > c++ -v > Reading specs from /usr/libexec/gcc/darwin/ppc/2.95.2/specs > Apple Computer, Inc. version gcc-932.1, based on gcc version > 2.95.2 19991024 (r\ > elease) Does "based on" mean "nearly equal" or not? Is it possible to upgrade this to gcc 2.95.3, which compiles vxl? (At least, it does on FreeBSD 4.6, and I think MacOS X is based on FreeBSD.) > First, one minor thing. The README says to build with "ccmake $VXLSRC". > I found no ccmake binary after downloading and installing CMake-1.4.3, but > "cmake $VXLSRC;make" seems to do the right thing. ccmake is the Curses based front-end to CMake, which should be built on any platform with Curses. (I assume you built CMake from sources.) If ccmake doesn't exist, "cmake -i" is probably the better way. It does the same thing as ccmake and CMakeSetup, but prompts on the command line instead. Running just plain cmake will often work, but you are forced to initially accept the defaults for all the options. > these are referenced from test_vcl_complex.c, which compiled without > warning or error. These symbols are defined in /usr/lib/libstdc++.a, > under "S" for "symbol in a section other than those above": > > nm /usr/lib/libstdc++.a | grep ostream | grep complex > 00000504 S ___ls__H1Zd_R7ostreamRCt7complex1ZX01_RB0 > 000004e4 S ___ls__H1Zf_R7ostreamRCt7complex1ZX01_RB0 > 00000504 S ___ls__H1Zr_R7ostreamRCt7complex1ZX01_RB0 Are the symbols also defined in libstdc++.so? You could try a static build. Set CXX_FLAGS to "-static" in your CMakeCache.txt. Amitha. |
From: Scott J. <joh...@ve...> - 2002-09-11 22:01:19
|
>Does "based on" mean "nearly equal" or not? Is it possible to upgrade >this to gcc 2.95.3, which compiles vxl? (At least, it does on FreeBSD >4.6, and I think MacOS X is based on FreeBSD.) Upgrading either the compiler or the OS might fix the problem, but I'm working on the puzzle of getting vxl compiled with my current development environment -- just my preference on this OS. > > >> these are referenced from test_vcl_complex.c, which compiled without >> warning or error. These symbols are defined in /usr/lib/libstdc++.a, >> under "S" for "symbol in a section other than those above": >> >> nm /usr/lib/libstdc++.a | grep ostream | grep complex >> 00000504 S ___ls__H1Zd_R7ostreamRCt7complex1ZX01_RB0 >> 000004e4 S ___ls__H1Zf_R7ostreamRCt7complex1ZX01_RB0 >> 00000504 S ___ls__H1Zr_R7ostreamRCt7complex1ZX01_RB0 > >Are the symbols also defined in libstdc++.so? You could try a static >build. Set CXX_FLAGS to "-static" in your CMakeCache.txt. > There is no dynamic version of libstdc++ on Mac OS X 10.1.5 (don't ask me why). Scott Johnston |