<div dir="ltr">For portable app you'll need to compile as many libs as possible statically. With pure C libraries it's usually easy to do so, but you will have a lot of problems with c++ executables and libraries, as libstdc++ has different ABI in different gcc releases. You'd need to compile libstdc++ statically, and also anything that links against c++ code with -static-libstdc++ and -fPIC. The libstdc++ itself should be built with -fPIC flag. <div>When I need portable binaries I compile gcc myself from sources prior to linking against static libstdc++, with </div><div><span style="color:rgb(128,128,128);font-style:italic;font-family:"bitstream vera sans mono"">./configure CXXFLAGS=-fPIC CFLAGS=-fPIC --enable-languages=c,c++ --disable-gnu-unique-object --disable-multilib </span></div><div><br></div><div>Also you could get problems with openssl if you use the crypto app. There are many different versions built of openssl each with different set of algorithms, so it is better to compile your own openssl with something like this:</div><div><pre style="color:rgb(0,0,0);font-family:"bitstream vera sans mono""><span style="color:rgb(128,128,128);font-style:italic">wget <a href="https://www.openssl.org/source/openssl-1.0.2h.tar.gz">https://www.openssl.org/source/openssl-1.0.2h.tar.gz</a><br></span><span style="color:rgb(128,128,128);font-style:italic">tar -xvzf openssl-1.0.2h.tar.gz<br></span><span style="color:rgb(128,128,128);font-style:italic">cd openssl-1.0.2h/<br></span><span style="color:rgb(128,128,128);font-style:italic">./config --prefix=/usr shared -fPIC<br></span><span style="color:rgb(128,128,128);font-style:italic">make depend && make && make install</span></pre></div><div>and then have otp built with</div><div><span style="color:rgb(128,128,128);font-style:italic;font-family:"bitstream vera sans mono"">--disable-dynamic-ssl-lib  --with-ssl=/usr/ --enable-smp-support  --without-termcap --enable-dirty-schedulers --enable-builtin-zlib</span> </div><div><br></div><div><br></div><div>You can even patch the OTP if you need it to work with relative install path (warning - the patch contains bashisms): <a href="http://pastebin.com/FJtRNRMJ">http://pastebin.com/FJtRNRMJ</a></div><div><br></div><div>All that stuff should be done on a dedicated build server or VPS, as it could break a lot of things in the system. But as the result the app is very portable. If built on x64 box, it would work on most x64 bit linux servers with any distro.<br></div><div><br></div><div><div>nif apps should be also built with something like this:</div><div><br></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">{"CXXFLAGS", "$CXXFLAGS -std=c++11 -Wall -fPIC -g3 -static-libstdc++"},</span></span></div><div><span style="color:rgb(0,0,0);font-family:monospace">{"DRV_LDFLAGS", "$DRV_LDFLAGS c_src/libsomeapp.a c_src/system/lib/libsnappy.a c_src/system/lib/liblz4.a c_src/system/lib/libz.a c_src/system/lib/libbz2.a /usr/lib64/</span><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">gcc/x86_64-pc-linux-gnu/5.3.0/libstdc++.a  -static-libstdc++"}]}.<br></span></div></div><div><span style="font-family:monospace"><br></span></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-10-25 15:35 GMT+03:00 Radu Popescu <span dir="ltr"><<a href="mailto:i.radu.popescu@gmail.com" target="_blank">i.radu.popescu@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello!<br>
<br>
I'm developing an Erlang application which is structured as an OTP release. It contains OTP applications and some native executables (written in C++). One of the Erlang dependencies also requires libsodium.<br>
<br>
When the time will come to deploy this - mostly to RH and Ubuntu/Debian servers, the idea is to have something as self-contained as possible.<br>
<br>
Are there best practices for how to handle C library dependencies for an Erlang/OTP release? I appreciate any advice.<br>
<br>
Thanks!<br>
<br>
Best regards,<br>
Radu<br>
______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/list<wbr>info/erlang-questions</a><br>
</blockquote></div><br></div>