Just confirmed the update:
bjam --without-libsegfault tahoar@library1:~$ ldd `which moses` linux-vdso.so.1 => (0x00007fff0d7ff000) librt.so.1 => /lib/librt.so.1 (0x00007f43de730000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f43de41c000) libm.so.6 => /lib/libm.so.6 (0x00007f43de198000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f43ddf81000) libpthread.so.0 => /lib/libpthread.so.0 (0x00007f43ddd64000) libc.so.6 => /lib/libc.so.6 (0x00007f43dd9e0000) /lib64/ld-linux-x86-64.so.2 (0x00007f43de95c000) bjam --static tahoar@library1:~$ ldd `which moses` not a dynamic executable Thanks On Mon, 06 Aug 2012 12:39:42 -0400, Kenneth Heafield <mo...@kheafield.com> wrote: > Ok, committed. Here's how the build system now behaves: > > link=shared: Everything linked dynamically. > > Default: internal libraries are statically linked. Boost and zlib > statically linked if possible. libSegFault dynamically linked. > Dynamically linked executable. > > --without-libsegfault: Same as default but no libSegFault. Still a > dynamically linked executable, even if you have static boost and > zlib. > It's complicated to do detect then be automatic. > > --static: No libSegFault. Print warning messages if you're missing > static libraries, but keep building anyway. Static executable. > > Kenneth > > On 08/06/2012 12:00 PM, Kenneth Heafield wrote: >> D'oh, it's a feature, not a bug. Add runtime-link=static and you'll >> get >> a fully-static executable. >> >> Plan to add this to the Moses build system. Testing now. >> >> Kenneth >> >> On 08/06/2012 11:31 AM, Tom Hoar wrote: >>> FYI, this build is on U-10.04.4 using the bjam shipped with Moses. >>> I can >>> send you the complete log if it helps. Let me know if you need >>> anything >>> else. >>> >>> Tom >>> >>> >>> On Mon, 06 Aug 2012 11:27:27 -0400, Kenneth Heafield >>> <mo...@kheafield.com> wrote: >>>> Hi, >>>> >>>> There appears to be a bug in boost-build that prevents it from >>>> making >>>> fully-static binaries with g++. This might take a while to sort >>>> out. >>>> >>>> Kenneth >>>> >>>> On 08/06/2012 10:48 AM, Tom Hoar wrote: >>>>> Thanks, Ken. I think this is easier than adding another option to >>>>> Moses >>>>> if we can understand the output. The ldd manpage says "ldd prints >>>>> the >>>>> shared libraries required by each program or shared library >>>>> specified on >>>>> the command line." I assume "shared libraries" means not >>>>> statically >>>>> linked? >>>>> >>>>> Here's the output on the moses I just built with today's github >>>>> updates. >>>>> The log output reported exit code 0 for all lines with "g++ >>>>> -static". >>>>> >>>>> tahoar@library1:~$ ldd `which moses` >>>>> linux-vdso.so.1 => (0x00007fffa2954000) >>>>> librt.so.1 => /lib/librt.so.1 (0x00007f818aa7b000) >>>>> libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f818a767000) >>>>> libm.so.6 => /lib/libm.so.6 (0x00007f818a4e3000) >>>>> libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f818a2cc000) >>>>> libpthread.so.0 => /lib/libpthread.so.0 (0x00007f818a0af000) >>>>> libc.so.6 => /lib/libc.so.6 (0x00007f8189d2b000) >>>>> /lib64/ld-linux-x86-64.so.2 (0x00007f818aca7000) >>>>> >>>>> Is this what I should expect if all of the libboost libraries are >>>>> statically linked? I think so because there are no references to >>>>> the >>>>> lboost_* or lz libraries in the log file. >>>>> >>>>> Tom >>>>> >>>>> >>>>> On Mon, 06 Aug 2012 10:14:35 -0400, Kenneth Heafield >>>>> <mo...@kheafield.com> wrote: >>>>>> On linux, >>>>>> >>>>>> ldd bin/moses >>>>>> >>>>>> On 08/06/2012 10:03 AM, Tom Hoar wrote: >>>>>>> Thanks Ken. I downloaded/compiled with the latest changes up to >>>>>>> BOOST_CHECK_CLOSE. The exit code 1 disappeared and everything >>>>>>> seems >>>>>>> okay. >>>>>>> >>>>>>> One more question. Other than the log output at compile time, >>>>>>> is there >>>>>>> any way to query the Moses binary to see which libraries are >>>>>>> statically >>>>>>> vs dynamically linked? >>>>>>> >>>>>>> For example, a while back, someone on the list gave this >>>>>>> command to >>>>>>> test >>>>>>> if the binary was compiled --with-srilm, and there are others >>>>>>> for >>>>>>> IRSTLM, RANDLM and KENLM. >>>>>>> >>>>>>> nm -C "/path/to/moses" | grep "vtable for >>>>>>> Moses::LanguageModelSRI"` >>>>>>> >>>>>>> I tried the obvious two grep searches "static" and "dynamic" >>>>>>> (below), >>>>>>> but they don't seem to relate to the libraries. Does anyone >>>>>>> know a way >>>>>>> to find/test if libraries are dynamically or statically linked? >>>>>>> >>>>>>> Thanks, >>>>>>> Tom >>>>>>> >>>>>>> >>>>>>> tahoar@library1:~/domy-2.5$ nm -C `which moses` | grep "static" >>>>>>> 00000000005ddbc0 t >>>>>>> __static_initialization_and_destruction_0(int, int) >>>>>>> 00000000005de7c1 t >>>>>>> __static_initialization_and_destruction_0(int, int) >>>>>>> 00000000005ded37 t >>>>>>> __static_initialization_and_destruction_0(int, int) >>>>>>> 00000000005e0067 t >>>>>>> __static_initialization_and_destruction_0(int, int) >>>>>>> 00000000005e2fc6 t >>>>>>> __static_initialization_and_destruction_0(int, int) >>>>>>> 00000000005ecae3 t >>>>>>> __static_initialization_and_destruction_0(int, int) >>>>>>> 00000000005ef140 t >>>>>>> __static_initialization_and_destruction_0(int, int) >>>>>>> 00000000005f475f t >>>>>>> __static_initialization_and_destruction_0(int, int) >>>>>>> 00000000005f4cd9 t >>>>>>> __static_initialization_and_destruction_0(int, int) >>>>>>> 00000000005f5e53 t >>>>>>> __static_initialization_and_destruction_0(int, int) >>>>>>> 00000000005f6f8e t >>>>>>> __static_initialization_and_destruction_0(int, int) >>>>>>> 00000000005f7183 t >>>>>>> __static_initialization_and_destruction_0(int, int) >>>>>>> 0000000000883cc0 d static_bl_desc >>>>>>> 0000000000883ca0 d static_d_desc >>>>>>> 0000000000610680 r static_dtree >>>>>>> 0000000000883c80 d static_l_desc >>>>>>> 0000000000610200 r static_ltree >>>>>>> >>>>>>> tahoar@library1:~/domy-2.5$ nm -C `which moses` | grep >>>>>>> "dynamic" >>>>>>> 0000000000570c50 W >>>>>>> boost::unordered_detail::hash_table_unique_keys<std::pair<float >>>>>>> const, >>>>>>> boost::dynamic_bitset<unsigned long, std::allocator<unsigned >>>>>>> long> >>>>>>>>> , >>>>>>> float, boost::hash<float>, std::equal_to<float>, >>>>>>> std::allocator<std::pair<float const, >>>>>>> boost::dynamic_bitset<unsigned >>>>>>> long, std::allocator<unsigned long> > > > >>>>>>> >::operator[](float const&) >>>>>>> 000000000057baf0 W >>>>>>> >>>>>>> >>>>>>> >>>>>>> boost::unordered_detail::hash_table_data_unique_keys<std::allocator<std::pair<std::pair<unsigned >>>>>>> >>>>>>> >>>>>>> char, unsigned char> const, boost::dynamic_bitset<unsigned >>>>>>> long, >>>>>>> std::allocator<unsigned long> > > > >>>>>>> >::~hash_table_data_unique_keys() >>>>>>> 0000000000570af0 W >>>>>>> >>>>>>> >>>>>>> >>>>>>> boost::unordered_detail::hash_table_data_unique_keys<std::allocator<std::pair<float >>>>>>> >>>>>>> >>>>>>> const, boost::dynamic_bitset<unsigned long, >>>>>>> std::allocator<unsigned >>>>>>> long> > > > >::create_buckets() >>>>>>> 0000000000570c00 W >>>>>>> >>>>>>> >>>>>>> >>>>>>> boost::unordered_detail::hash_table_data_unique_keys<std::allocator<std::pair<float >>>>>>> >>>>>>> >>>>>>> const, boost::dynamic_bitset<unsigned long, >>>>>>> std::allocator<unsigned >>>>>>> long> > > > >::node_constructor::~node_constructor() >>>>>>> 0000000000570b70 W >>>>>>> >>>>>>> >>>>>>> >>>>>>> boost::unordered_detail::hash_table_data_unique_keys<std::allocator<std::pair<float >>>>>>> >>>>>>> >>>>>>> const, boost::dynamic_bitset<unsigned long, >>>>>>> std::allocator<unsigned >>>>>>> long> > > > >::~hash_table_data_unique_keys() >>>>>>> 000000000057ba60 W >>>>>>> >>>>>>> >>>>>>> >>>>>>> boost::unordered_detail::hash_table_data_unique_keys<std::allocator<std::pair<unsigned >>>>>>> >>>>>>> >>>>>>> int const, boost::dynamic_bitset<unsigned long, >>>>>>> std::allocator<unsigned >>>>>>> long> > > > >::~hash_table_data_unique_keys() >>>>>>> U __dynamic_cast@@CXXABI_1.3 >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Mon, 06 Aug 2012 08:20:00 -0400, Kenneth Heafield >>>>>>> <mo...@kheafield.com> wrote: >>>>>>>> Hi, >>>>>>>> >>>>>>>> You're correct. There doesn't seem to be a static version of >>>>>>>> this >>>>>>>> library. I've added the --nosegfault option (which isn't as >>>>>>>> cool as >>>>>>>> it sounds) to skip this library. >>>>>>>> >>>>>>>> Kenneth >>>>>>>> >>>>>>>> On 08/06/2012 02:08 AM, Tom Hoar wrote: >>>>>>>>> I read the comment "In order to obtain a fully static Moses, >>>>>>>>> every g++ >>>>>>>>> command line that includes "-static" must pass with exit code >>>>>>>>> 0." >>>>>>>>> with >>>>>>>>> interest. >>>>>>>>> >>>>>>>>> When we compile moses, this log output line shows an exit >>>>>>>>> code 1. >>>>>>>>> All >>>>>>>>> the others are 0. >>>>>>>>> >>>>>>>>> bash -c "g++ -static -lSegFault -x c++ -<<<'int main() {}' -o >>>>>>>>> /dev/null >>>>>>>>>> /dev/null 2>/dev/null" >>>>>>>>> 1 >>>>>>>>> >>>>>>>>> Any suggestions as to what's missing/how to correct so we >>>>>>>>> have a >>>>>>>>> fully-static Moses? >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> Tom >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Fri, 03 Aug 2012 18:13:47 -0400, Kenneth Heafield >>>>>>>>> <mo...@kheafield.com> wrote: >>>>>>>>>> Hi, >>>>>>>>>> >>>>>>>>>> Moses attempts to link statically by default but falls back >>>>>>>>>> to >>>>>>>>>> dynamic >>>>>>>>>> links. You must have static versions of all the dependencies >>>>>>>>>> installed >>>>>>>>>> as well. Run >>>>>>>>>> >>>>>>>>>> bjam --debug-configuration >>>>>>>>>> >>>>>>>>>> and, near the top, it will show you some command lines >>>>>>>>>> followed by >>>>>>>>>> their >>>>>>>>>> exit code. In order to obtain a fully static Moses, every >>>>>>>>>> g++ >>>>>>>>>> command >>>>>>>>>> line that includes "-static" must pass with exit code 0. >>>>>>>>>> >>>>>>>>>> Kenneth >>>>>>> >>>>> >>> >> _______________________________________________ >> Moses-support mailing list >> Moses-support@mit.edu >> http://mailman.mit.edu/mailman/listinfo/moses-support > _______________________________________________ > Moses-support mailing list > Moses-support@mit.edu > http://mailman.mit.edu/mailman/listinfo/moses-support _______________________________________________ Moses-support mailing list Moses-support@mit.edu http://mailman.mit.edu/mailman/listinfo/moses-support