<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
					xmlns:atom="http://www.w3.org/2005/Atom"
				  >
<channel>
<atom:link rel="self"  type="application/rss+xml"  href="http://rulinux.net/rss_from_sect_4_subsect_6_thread_1973"  />
<title>rulinux.net - Форум - Development - C++: как проходит инициализация программы?</title>
<link>http://rulinux.net/</link>
<description><![CDATA[Портал о GNU/Linux и не только]]></description>
<image><title>rulinux.net - Форум - Development - C++: как проходит инициализация программы?</title>
<link>http://rulinux.net/</link>
<url>http://rulinux.net/rss_icon.png</url>
</image>
<item>
<title>Re:C++: как проходит инициализация программы?</title>
<link>https://rulinux.net/message.php?newsid=1973&amp;page=1#15163</link>
<guid>https://rulinux.net/message.php?newsid=1973&amp;page=1#15163</guid>
<pubDate>Mon, 29 Jun 2009 11:09:04 +0400</pubDate>
<description><![CDATA[<p>Хм, действительно работает. Помнится, тогда я пробовал такой подход, но, по-видимому, неправильно указал опции сборки. Спасибо.</p><p>Решение:
<fieldset style="border: 1px dashed black; padding:0px;"><ol style="background-color:#3d3d3d;" start="1"><li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;[tmp]&gt; cat main.cpp <li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;int test_function(int x) {<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp; return 2*x;<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;};<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;int main() {<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp; return test_function(42);<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;};<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;[tmp]&gt; cat test.cpp <li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;extern int test_function(int x);<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;int main() {<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp; return test_function(5);<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;};<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;[tmp]&gt; g++ -fPIC -shared -Wl,-soname,libmain.so -o libmain.so main.cpp<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;[tmp]&gt; g++ test.cpp -L. -lmain<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;[tmp]&gt; LD_LIBRARY_PATH=. ./a.out <li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;[tmp]&gt; echo $?<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;10<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;</ol></fieldset></p><p>Но теоретический вопрос остаётся в силе &#8212; мне было бы интересно почитать про инициализацию программы в C++.</p><p>&#8211; топикстартер.</p>]]></description>
</item>
<item>
<title>Re:C++: как проходит инициализация программы?</title>
<link>https://rulinux.net/message.php?newsid=1973&amp;page=1#15162</link>
<guid>https://rulinux.net/message.php?newsid=1973&amp;page=1#15162</guid>
<pubDate>Wed, 24 Jun 2009 17:39:26 +0400</pubDate>
<description><![CDATA[<p>С настоящего момента данный тред посвящен Мажиде Руми.</p>]]></description>
</item>
<item>
<title>Re:C++: как проходит инициализация программы?</title>
<link>https://rulinux.net/message.php?newsid=1973&amp;page=1#15161</link>
<guid>https://rulinux.net/message.php?newsid=1973&amp;page=1#15161</guid>
<pubDate>Wed, 24 Jun 2009 17:35:51 +0400</pubDate>
<description><![CDATA[<p>может будет проще собрать программу как либу (или как экзешку с экспортируемыми функциями) и прилинковать ее к main2.c?</p>]]></description>
</item>
<item>
<title>C++: как проходит инициализация программы?</title>
<link>https://rulinux.net/message.php?newsid=1973&amp;page=1#15160</link>
<guid>https://rulinux.net/message.php?newsid=1973&amp;page=1#15160</guid>
<pubDate>Tue, 09 Jun 2009 14:03:15 +0400</pubDate>
<description><![CDATA[<p>Посоветуйте документ, в котором можно прочитать как выполняется иницализация программы &#8212; всё, что происходит до входа в main(). С теоретической точки зрения интересует какие вызываются функции из системных библиотек и какие выделяются ресурсы, с практической хочется попробовать изменить имя функции main(). Это может пригодится при дебаге плохо структурированной программы, когда нужно написать тестовый модуль для функций, объявленных в том же файле, что и функция main(). Например, в C можно сделать так:</p><p>extern int test_function(int x);</p><p>int main2() {
 exit(test_function(42)); /* с return получается сегфолт */
}</p><p>И скомпилировать так: gcc -Wl,-e,main2 test.c main.o. В C++ подобный подход приводит к сегфолту, насколько я понял из-за того, что не происходит инициализация в стандартной библиотеке. Вызов _init() в начале main2() немного помогает, но тогда получается сегфолт при обращении, например, к strlen. Как можно сделать такую штуку? Грязный хак только под g++, ELF и x86 подойдёт.</p>]]></description>
</item>
</channel>
</rss>