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

Reply via email to