{"id":364,"date":"2019-02-23T08:45:28","date_gmt":"2019-02-23T08:45:28","guid":{"rendered":"https:\/\/blog.syddel.uk\/?p=364"},"modified":"2025-03-04T00:05:57","modified_gmt":"2025-03-04T00:05:57","slug":"testing","status":"publish","type":"post","link":"https:\/\/blog.syddel.uk\/?p=364","title":{"rendered":"Linux C\/C++: Compiling and Linking Basics"},"content":{"rendered":"\n<p>My parents bought me a TRS-80 model III when I was 13 years of age, and boy did I love my TRS-80! I quickly learnt how to code using the baked in BASIC language, and even familiarized myself with simple Z80 assembly language programming using the magic of BASIC&#8217;s <em>&#8220;peeks&#8221;<\/em> and <em>&#8220;pokes&#8221;<\/em>. I recall desperately wanting to code in C\/C++ back then. However, in order to get my grubby little hands on a C\/C++ compiler, I needed money (from memory, I think it was around two hundred Australian dollars at the time). Considering I &#8220;earned&#8221; around $5 a week for washing dishes and taking out the trash, it was going to take me at an eternity to be able to purchase a C\/C++ compiler (I had other expenses at the time &#8211; like buying the hand-held double-LCD screen &#8220;Donkey Kong&#8221; game, jaw busters, and Star Wars action figures\/spaceships). The year was 1983&#8230;<\/p>\n\n\n\n<p>I only started coding in C\/C++ when I managed to purchase my first &#8220;IBM compatible&#8221; running MS-DOS. The compiler was Borland&#8217;s C++ compiler, and it set me back over a hundred Australia dollars. The year was 1987..<\/p>\n\n\n\n<p>When I first started using Linux, I didn&#8217;t really comprehend the ideology\/philosophy behind the FOSS (Free and Open Source Software) movement. I didn&#8217;t pay much attention the software licenses, I just knew that Linux was &#8220;free of charge&#8221;, and was ecstatic that a C\/C++ compiler was included (free of charge!). I cannot remember what the year was &#8211; some time in the early 2000s.<\/p>\n\n\n\n<p>Fast-forward to today, and you can buy a Raspberry Pi for next to nothing, install Raspbian or (I believe) Ubuntu Core, learn how to use one of the editors that can run in a terminal, and start coding in C\/C++ to your heart&#8217;s content. The barrier to entry is now so low, that it has literally bought a tear to my eye (once or twice).<\/p>\n\n\n\n<p>Anyway, enough about my personal journey and experiences with C\/C++ compilers. Let&#8217;s get in to some basics about C\/C++ in modern day (at time of writing) Linux.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Compiling C\/C++ with GNU C\/C++ Compiler<\/h2>\n\n\n\n<p>Here&#8217;s a simple C program that will print out the command line arguments you pass to the program when you execute it:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"#include &lt;stdio.h&gt;\n\nint main(int argc, char *argv[])\n{\n  for (int i=0; i&lt;argc; i++) {\n    printf(&quot;arg[%d]: %s\\n&quot;, i, argv[i]);\n  }\n\n  return 0;\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">#include<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&lt;stdio.h&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">main<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">argc<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #F47067\">char<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #F69D50\">argv<\/span><span style=\"color: #ADBAC7\">[])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">for<\/span><span style=\"color: #ADBAC7\"> (<\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> i<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">0<\/span><span style=\"color: #ADBAC7\">; i<\/span><span style=\"color: #F47067\">&lt;<\/span><span style=\"color: #ADBAC7\">argc; i<\/span><span style=\"color: #F47067\">++<\/span><span style=\"color: #ADBAC7\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">printf<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;arg[<\/span><span style=\"color: #F47067\">%d<\/span><span style=\"color: #96D0FF\">]: <\/span><span style=\"color: #F47067\">%s\\n<\/span><span style=\"color: #96D0FF\">&quot;<\/span><span style=\"color: #ADBAC7\">, i, argv[i]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">0<\/span><span style=\"color: #ADBAC7\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Let&#8217;s assume you&#8217;ve saved the above program in a file called <code>program.c<\/code>. To compile it in to a binary called <code>program<\/code>, you would use:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"gcc -o program program.c\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F69D50\">gcc<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">-o<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program.c<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Let&#8217;s execute the program we&#8217;ve created to see what the output is:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:cpp]$ .\/program one two three four\narg[0]: .\/program\narg[1]: one\narg[2]: two\narg[3]: three\narg[4]: four\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:cpp]$ .\/program one two three four<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">arg[0]:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">.\/program<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">arg[1]:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">one<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">arg[2]:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">two<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">arg[3]:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">three<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">arg[4]:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">four<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Let&#8217;s re-write this example as a C++ program and save the file as <code>program.cpp<\/code>:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"#include &lt;iostream&gt;\n\nint main(int argc, char *argv[])\n{\n  for (int i=0; i&lt;argc; i++) {\n    std::cout &lt;&lt; &quot;arg[&quot; &lt;&lt; i &lt;&lt; &quot;]: &quot; &lt;&lt; argv[i] &lt;&lt; std::endl;\n  }\n\n  return 0;\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">#include<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">main<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">argc<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #F47067\">char<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #F69D50\">argv<\/span><span style=\"color: #ADBAC7\">[])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">for<\/span><span style=\"color: #ADBAC7\"> (<\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> i<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">0<\/span><span style=\"color: #ADBAC7\">; i<\/span><span style=\"color: #F47067\">&lt;<\/span><span style=\"color: #ADBAC7\">argc; i<\/span><span style=\"color: #F47067\">++<\/span><span style=\"color: #ADBAC7\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">std<\/span><span style=\"color: #ADBAC7\">::cout <\/span><span style=\"color: #F47067\">&lt;&lt;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;arg[&quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">&lt;&lt;<\/span><span style=\"color: #ADBAC7\"> i <\/span><span style=\"color: #F47067\">&lt;&lt;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;]: &quot;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">&lt;&lt;<\/span><span style=\"color: #ADBAC7\"> argv[i] <\/span><span style=\"color: #F47067\">&lt;&lt;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">std<\/span><span style=\"color: #ADBAC7\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">0<\/span><span style=\"color: #ADBAC7\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Let&#8217;s try to compile this C++ program with the GNU C compiler:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"syd@pi-server:cpp]$ gcc -o program program.cpp \n\/tmp\/ccgsFTNy.o: In function `main':\nprogram.cpp:(.text+0x34): undefined reference to `std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp; std::operator&lt;&lt; &lt;std::char_traits&lt;char&gt; &gt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, char const*)'\nprogram.cpp:(.text+0x44): undefined reference to `std::ostream::operator&lt;&lt;(int)'\nprogram.cpp:(.text+0x54): undefined reference to `std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp; std::operator&lt;&lt; &lt;std::char_traits&lt;char&gt; &gt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, char const*)'\nprogram.cpp:(.text+0x70): undefined reference to `std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp; std::operator&lt;&lt; &lt;std::char_traits&lt;char&gt; &gt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, char const*)'\nprogram.cpp:(.text+0x80): undefined reference to `std::ostream::operator&lt;&lt;(std::ostream&amp; (*)(std::ostream&amp;))'\nprogram.cpp:(.text+0xa8): undefined reference to `std::cout'\nprogram.cpp:(.text+0xb0): undefined reference to `std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp; std::endl&lt;char, std::char_traits&lt;char&gt; &gt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;)'\n\/tmp\/ccgsFTNy.o: In function `__static_initialization_and_destruction_0(int, int)':\nprogram.cpp:(.text+0xe8): undefined reference to `std::ios_base::Init::Init()'\nprogram.cpp:(.text+0x114): undefined reference to `std::ios_base::Init::~Init()'\ncollect2: error: ld returned 1 exit status\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F69D50\">syd@pi-server:cpp]$<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">gcc<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">-o<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program.cpp<\/span><span style=\"color: #ADBAC7\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">\/tmp\/ccgsFTNy.o:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">In<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">function<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">`<\/span><span style=\"color: #F69D50\">main&#39;:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">program.cpp:(.text+0x34): undefined reference to `std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp; std::operator&lt;&lt; &lt;std::char_traits&lt;char&gt; &gt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, char const*)&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">program.cpp:(.text+0x44<\/span><span style=\"color: #96D0FF\">): undefined reference to `<\/span><span style=\"color: #F69D50\">std::ostream::operator&lt;&lt;(int<\/span><span style=\"color: #ADBAC7\">)<\/span><span style=\"color: #96D0FF\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #96D0FF\">program.cpp:(.text+0x54): undefined reference to `std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp; std::operator&lt;&lt; &lt;std::char_traits&lt;char&gt; &gt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, char const*)&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">program.cpp:(.text+0x70<\/span><span style=\"color: #ADBAC7\">): undefined reference to <\/span><span style=\"color: #96D0FF\">`<\/span><span style=\"color: #F69D50\">std::basic_ostream&lt;char,<\/span><span style=\"color: #96D0FF\"> std::char_traits<\/span><span style=\"color: #F47067\">&lt;<\/span><span style=\"color: #96D0FF\">char<\/span><span style=\"color: #F47067\">&gt;<\/span><span style=\"color: #96D0FF\"> <\/span><span style=\"color: #F47067\">&gt;&amp;<\/span><span style=\"color: #96D0FF\"> std::operator&lt;&lt; <\/span><span style=\"color: #F47067\">&lt;<\/span><span style=\"color: #96D0FF\">std::char_traits<\/span><span style=\"color: #F47067\">&lt;<\/span><span style=\"color: #96D0FF\">char<\/span><span style=\"color: #F47067\">&gt;<\/span><span style=\"color: #96D0FF\"> &gt;(<\/span><span style=\"color: #F69D50\">std::basic_ostream&lt;char,<\/span><span style=\"color: #96D0FF\"> std::char_traits<\/span><span style=\"color: #F47067\">&lt;<\/span><span style=\"color: #96D0FF\">char<\/span><span style=\"color: #F47067\">&gt;<\/span><span style=\"color: #96D0FF\"> <\/span><span style=\"color: #F47067\">&gt;&amp;<\/span><span style=\"color: #96D0FF\">, char const<\/span><span style=\"color: #6CB6FF\">*<\/span><span style=\"color: #96D0FF\">)&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #96D0FF\">program.cpp:(.text+0x80): undefined reference to `std::ostream::operator&lt;&lt;(std::ostream&amp; (*)(std::ostream&amp;))&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">program.cpp:(.text+0xa8<\/span><span style=\"color: #96D0FF\">): undefined reference to `<\/span><span style=\"color: #F69D50\">std::cout<\/span><span style=\"color: #F69D50\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">program.cpp:(.text+0xb0): undefined reference to `std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp; std::endl&lt;char, std::char_traits&lt;char&gt; &gt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;)&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">\/tmp\/ccgsFTNy.o:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">In<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">function<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">`<\/span><span style=\"color: #F69D50\">__static_initialization_and_destruction_0(int,<\/span><span style=\"color: #96D0FF\"> int)&#39;:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #96D0FF\">program.cpp:(.text+0xe8): undefined reference to `std::ios_base::Init::Init()&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">program.cpp:(.text+0x114<\/span><span style=\"color: #96D0FF\">): undefined reference to <\/span><span style=\"color: #DCBDFB\">`std::ios_base::Init::~Init<\/span><span style=\"color: #96D0FF\">()&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #96D0FF\">collect2: error: ld returned 1 exit status<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Compilation failed! What happened? The answer is the GNU C compiler doesn&#8217;t pull in the libraries required to compile C++ code &#8211; in particular, the stdc++ library. You can explicitly instruct the GNU C compiler to use stdc++<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"gcc -o program -lstdc++ program.cpp\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F69D50\">gcc<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">-o<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">-lstdc++<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program.cpp<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Compiling C++ code with the gcc compiler is not recommended. Things can quickly become very complicated (i.e. trying to remember what libraries need to be linked, and how). Thankfully, there&#8217;s a GNU C++ compiler included with Linux too, and it makes compiler C++ code much easier. For the same example above, the following can be used:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"g++ -o program program.cpp\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F69D50\">g++<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">-o<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program.cpp<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Large and complicated C and C++ programs often have multiple source files &#8211; each specific to a particular feature\/function. This separation assists in creating projects that are easier to maintain and debug. Let&#8217;s take a look at a very simple example.<\/p>\n\n\n\n<code><strong>addtwoints.c<\/strong><\/code>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"int add(int x, int y)\n{\n  return x + y;\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">add<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">x<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">y<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> x <\/span><span style=\"color: #F47067\">+<\/span><span style=\"color: #ADBAC7\"> y;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<code><strong>addtwoints.h<\/strong><\/code>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"int add(int, int);\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">add<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<code><strong>program.c<\/strong><\/code>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"#include <stdio.h&gt;\n#include <stdlib.h&gt;\n\n#include &quot;addtwoints.h&quot;\n\nint main(int argc, char *argv[])\n{\n  if (argc != 3) {\n    printf(&quot;*** ERROR! Usage: %s int1 int2\\n&quot;, argv[0]);\n    return 1;\n  }\n\n  int a = atoi(argv[1]), b = atoi(argv[2]);\n  printf(&quot;%d plus %d is %d.\\n&quot;, a, b, add(a, b));\n\n  return 0;\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">#include<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&lt;stdio.h&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">#include<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&lt;stdlib.h&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">#include<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;addtwoints.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">main<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">argc<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #F47067\">char<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #F69D50\">argv<\/span><span style=\"color: #ADBAC7\">[])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> (argc <\/span><span style=\"color: #F47067\">!=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">printf<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;*** ERROR! Usage: <\/span><span style=\"color: #F47067\">%s<\/span><span style=\"color: #96D0FF\"> int1 int2<\/span><span style=\"color: #F47067\">\\n<\/span><span style=\"color: #96D0FF\">&quot;<\/span><span style=\"color: #ADBAC7\">, argv[<\/span><span style=\"color: #6CB6FF\">0<\/span><span style=\"color: #ADBAC7\">]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> a <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">atoi<\/span><span style=\"color: #ADBAC7\">(argv[<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">]), b <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">atoi<\/span><span style=\"color: #ADBAC7\">(argv[<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #DCBDFB\">printf<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;<\/span><span style=\"color: #F47067\">%d<\/span><span style=\"color: #96D0FF\"> plus <\/span><span style=\"color: #F47067\">%d<\/span><span style=\"color: #96D0FF\"> is <\/span><span style=\"color: #F47067\">%d<\/span><span style=\"color: #96D0FF\">.<\/span><span style=\"color: #F47067\">\\n<\/span><span style=\"color: #96D0FF\">&quot;<\/span><span style=\"color: #ADBAC7\">, a, b, <\/span><span style=\"color: #DCBDFB\">add<\/span><span style=\"color: #ADBAC7\">(a, b));<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">0<\/span><span style=\"color: #ADBAC7\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Let&#8217;s assume the directory you&#8217;re working in contains nothing more than the three files listed above:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:addtwonumbers]$ ls -lh\ntotal 12K\n-rw-r--r-- 1 syd syd  42 Feb 24 11:25 addtwoints.c\n-rw-r--r-- 1 syd syd  19 Feb 24 11:29 addtwoints.h\n-rw-r--r-- 1 syd syd 305 Feb 24 11:43 program.c\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:addtwonumbers]$ ls -lh<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">total<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">12<\/span><span style=\"color: #96D0FF\">K<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #6CB6FF\">42<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">11<\/span><span style=\"color: #96D0FF\">:25<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">addtwoints.c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #6CB6FF\">19<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">11<\/span><span style=\"color: #96D0FF\">:29<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">addtwoints.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">305<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">11<\/span><span style=\"color: #96D0FF\">:43<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program.c<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>A very simple way to compile and link this code in to a binary called program is:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"gcc -o program *.c\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F69D50\">gcc<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">-o<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">*<\/span><span style=\"color: #96D0FF\">.c<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>You can then run the program as follows:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:addtwonumbers]$ .\/program \n*** ERROR! Usage: .\/program int1 int2\n[syd@pi-server:addtwonumbers]$ .\/program 1 2\n1 plus 2 is 3.\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:addtwonumbers]$ .\/program <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">***<\/span><span style=\"color: #ADBAC7\"> ERROR<\/span><span style=\"color: #F47067\">!<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Usage:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">.\/program<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">int1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">int2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:addtwonumbers]$ .\/program 1 2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">plus<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">is<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #96D0FF\">.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Great! However, it should be noted that there are advantages to compiling and then linking source files separately. When you compile a C\/C++ source file, the result is an object file (usually with the extension .o). You can then link your object files to create an executable. Let&#8217;s take a quick look at how this would be done manually using the above &#8220;add two integers&#8221; example<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:addtwonumbers]$ gcc -c addtwoints.c program.c \n[syd@pi-server:addtwonumbers]$ ls -l\ntotal 20\n-rw-r--r-- 1 syd syd   42 Feb 24 11:25 addtwoints.c\n-rw-r--r-- 1 syd syd   19 Feb 24 11:29 addtwoints.h\n-rw-r--r-- 1 syd syd  868 Feb 24 12:01 addtwoints.o\n-rw-r--r-- 1 syd syd  305 Feb 24 11:43 program.c\n-rw-r--r-- 1 syd syd 1300 Feb 24 12:01 program.o\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:addtwonumbers]$ gcc -c addtwoints.c program.c <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:addtwonumbers]$ ls -l<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">total<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">20<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">   <\/span><span style=\"color: #6CB6FF\">42<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">11<\/span><span style=\"color: #96D0FF\">:25<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">addtwoints.c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">   <\/span><span style=\"color: #6CB6FF\">19<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">11<\/span><span style=\"color: #96D0FF\">:29<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">addtwoints.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #6CB6FF\">868<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">12<\/span><span style=\"color: #96D0FF\">:01<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">addtwoints.o<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #6CB6FF\">305<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">11<\/span><span style=\"color: #96D0FF\">:43<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program.c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1300<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">12<\/span><span style=\"color: #96D0FF\">:01<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program.o<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The -c compiler flag tells the compiler to &#8220;compile only&#8221; (i.e. do not link and do not create an executable), which is why <code>addtwoints.o<\/code> and <code>program.o<\/code> are the only files that were generated. This becomes very beneficial when you have a large program (perhaps with hundreds or even thousands of C\/C++ source files) and you only change the code in a single file. Instead of having to recompile the entire entire project (which can take hours for very large projects), the single source file change can be compiled and linked with the object files (for which the corresponding source files haven&#8217;t been altered) in a matter of minutes or seconds.<\/p>\n\n\n\n<p>Let&#8217;s now link the two object files (<code>addtwoints.o<\/code> and <code>program.o<\/code>) in to a binary that can be executed:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:addtwonumbers]$ gcc -o program addtwoints.o program.o\n[syd@pi-server:addtwonumbers]$ ls -lh\ntotal 32K\n-rw-r--r-- 1 syd syd   42 Feb 24 11:25 addtwoints.c\n-rw-r--r-- 1 syd syd   19 Feb 24 11:29 addtwoints.h\n-rw-r--r-- 1 syd syd  868 Feb 24 12:01 addtwoints.o\n-rwxr-xr-x 1 syd syd 8.1K Feb 24 12:24 program\n-rw-r--r-- 1 syd syd  305 Feb 24 11:43 program.c\n-rw-r--r-- 1 syd syd 1.3K Feb 24 12:01 program.o\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:addtwonumbers]$ gcc -o program addtwoints.o program.o<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:addtwonumbers]$ ls -lh<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">total<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">32<\/span><span style=\"color: #96D0FF\">K<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">   <\/span><span style=\"color: #6CB6FF\">42<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">11<\/span><span style=\"color: #96D0FF\">:25<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">addtwoints.c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">   <\/span><span style=\"color: #6CB6FF\">19<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">11<\/span><span style=\"color: #96D0FF\">:29<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">addtwoints.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #6CB6FF\">868<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">12<\/span><span style=\"color: #96D0FF\">:01<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">addtwoints.o<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rwxr-xr-x<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">8.1<\/span><span style=\"color: #96D0FF\">K<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">12<\/span><span style=\"color: #96D0FF\">:24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #6CB6FF\">305<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">11<\/span><span style=\"color: #96D0FF\">:43<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program.c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1.3<\/span><span style=\"color: #96D0FF\">K<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">12<\/span><span style=\"color: #96D0FF\">:01<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program.o<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Linking<\/h2>\n\n\n\n<p>There are two ways to link to compiled objects (libraries) so that your executable can use the functionality exposed within them:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Static linking<\/li>\n\n\n\n<li>Dynamic linking<\/li>\n<\/ol>\n\n\n\n<p>Static linking is done at compile time and pulls in the pre-compiled object code in to your executable (resulting in a larger executable). Dynamic linking is done at runtime and uses &#8220;shared objects&#8221;. When linking, this is the default option (if there are both static and shared libraries). Shared objects can be used by any number of executables within the operating system.<\/p>\n\n\n\n<p>On Linux systems, there is a convention for libraries:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Library names are always preceded with lib.<\/li>\n\n\n\n<li>The extension for static libraries is usually .a (for &#8220;archive&#8221;).<\/li>\n\n\n\n<li>The extension for shared libraries is usually .so (for &#8220;shared object&#8221;).<\/li>\n<\/ul>\n\n\n\n<p>A Linux executable can contain both statically linked and dynamically linked libraries.<\/p>\n\n\n\n<p>In this section, we&#8217;re going to use four files:<\/p>\n\n\n\n<code><strong>addtwoints.c<\/strong><\/code>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"int add(int x, int y)\n{\n  return x + y;\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">add<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">x<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">y<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> x <\/span><span style=\"color: #F47067\">+<\/span><span style=\"color: #ADBAC7\"> y;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<code><strong>sayhello.c<\/strong><\/code>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"#include <stdio.h&gt;\n\nvoid hello(const char **s)\n{\n  printf(&quot;Hello there, %s!\\n&quot;, *s);  \n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">#include<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&lt;stdio.h&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">void<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">hello<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">const<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">char<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">**<\/span><span style=\"color: #F69D50\">s<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #DCBDFB\">printf<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;Hello there, <\/span><span style=\"color: #F47067\">%s<\/span><span style=\"color: #96D0FF\">!<\/span><span style=\"color: #F47067\">\\n<\/span><span style=\"color: #96D0FF\">&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #ADBAC7\">s);  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<code><strong>myfunctions.h<\/strong><\/code>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"int add(int, int);\nvoid hello(const char **);\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">add<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">void<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">hello<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">const<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">char<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">**<\/span><span style=\"color: #ADBAC7\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<code><strong>program.c<\/strong><\/code>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"#include <stdio.h&gt;\n#include <stdlib.h&gt;\n\n#include &quot;myfunctions.h&quot;\n\nint main(int argc, char *argv[])\n{\n  if (argc != 4) {\n    printf(&quot;*** ERROR! Usage: %s int1 int2 string1\\n&quot;, argv[0]);\n    return 1;\n  }\n\n  int a = atoi(argv[1]), b = atoi(argv[2]);\n  printf(&quot;%d plus %d is %d.\\n&quot;, a, b, add(a, b));\n  \n  hello((const char **)&amp;argv[3]);\n\n  return 0;\n}\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">#include<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&lt;stdio.h&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">#include<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&lt;stdlib.h&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">#include<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;myfunctions.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">main<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">argc<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #F47067\">char<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #F69D50\">argv<\/span><span style=\"color: #ADBAC7\">[])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> (argc <\/span><span style=\"color: #F47067\">!=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">4<\/span><span style=\"color: #ADBAC7\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #DCBDFB\">printf<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;*** ERROR! Usage: <\/span><span style=\"color: #F47067\">%s<\/span><span style=\"color: #96D0FF\"> int1 int2 string1<\/span><span style=\"color: #F47067\">\\n<\/span><span style=\"color: #96D0FF\">&quot;<\/span><span style=\"color: #ADBAC7\">, argv[<\/span><span style=\"color: #6CB6FF\">0<\/span><span style=\"color: #ADBAC7\">]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">int<\/span><span style=\"color: #ADBAC7\"> a <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">atoi<\/span><span style=\"color: #ADBAC7\">(argv[<\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\">]), b <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">atoi<\/span><span style=\"color: #ADBAC7\">(argv[<\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\">]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #DCBDFB\">printf<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;<\/span><span style=\"color: #F47067\">%d<\/span><span style=\"color: #96D0FF\"> plus <\/span><span style=\"color: #F47067\">%d<\/span><span style=\"color: #96D0FF\"> is <\/span><span style=\"color: #F47067\">%d<\/span><span style=\"color: #96D0FF\">.<\/span><span style=\"color: #F47067\">\\n<\/span><span style=\"color: #96D0FF\">&quot;<\/span><span style=\"color: #ADBAC7\">, a, b, <\/span><span style=\"color: #DCBDFB\">add<\/span><span style=\"color: #ADBAC7\">(a, b));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #DCBDFB\">hello<\/span><span style=\"color: #ADBAC7\">((<\/span><span style=\"color: #F47067\">const<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">char<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">**<\/span><span style=\"color: #ADBAC7\">)<\/span><span style=\"color: #F47067\">&amp;<\/span><span style=\"color: #ADBAC7\">argv[<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">]);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">0<\/span><span style=\"color: #ADBAC7\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Static Linking<\/h2>\n\n\n\n<p>From the source files listed above, we will create a static library (i.e. an &#8220;archive&#8221;) using <code>addtwoints.c<\/code> and <code>sayhello.c<\/code>. This is achieved by compiling and then using the <code>ar<\/code> tool on the resulting object files:<br><\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:static]$ gcc -static -c addtwoints.c sayhello.c \n[syd@pi-server:static]$ ar crv libmyfunctions.a addtwoints.o sayhello.o\na - addtwoints.o\na - sayhello.o\n[syd@pi-server:static]$ ls -lh\ntotal 28K\n-rw-r--r-- 1 syd syd   42 Feb 24 18:23 addtwoints.c\n-rw-r--r-- 1 syd syd  868 Feb 24 20:41 addtwoints.o\n-rw-r--r-- 1 syd syd 2.2K Feb 24 20:42 libmyfunctions.a\n-rw-r--r-- 1 syd syd   46 Feb 24 18:32 myfunctions.h\n-rw-r--r-- 1 syd syd  351 Feb 24 18:36 program.c\n-rw-r--r-- 1 syd syd   89 Feb 24 18:31 sayhello.c\n-rw-r--r-- 1 syd syd 1.1K Feb 24 20:41 sayhello.o\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:static]$ gcc -static -c addtwoints.c sayhello.c <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:static]$ ar crv libmyfunctions.a addtwoints.o sayhello.o<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">a<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">-<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">addtwoints.o<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">a<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">-<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">sayhello.o<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:static]$ ls -lh<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">total<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">28<\/span><span style=\"color: #96D0FF\">K<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">   <\/span><span style=\"color: #6CB6FF\">42<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">18<\/span><span style=\"color: #96D0FF\">:23<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">addtwoints.c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #6CB6FF\">868<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">20<\/span><span style=\"color: #96D0FF\">:41<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">addtwoints.o<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">2.2<\/span><span style=\"color: #96D0FF\">K<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">20<\/span><span style=\"color: #96D0FF\">:42<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">libmyfunctions.a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">   <\/span><span style=\"color: #6CB6FF\">46<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">18<\/span><span style=\"color: #96D0FF\">:32<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">myfunctions.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #6CB6FF\">351<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">18<\/span><span style=\"color: #96D0FF\">:36<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program.c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">   <\/span><span style=\"color: #6CB6FF\">89<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">18<\/span><span style=\"color: #96D0FF\">:31<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">sayhello.c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1.1<\/span><span style=\"color: #96D0FF\">K<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">20<\/span><span style=\"color: #96D0FF\">:41<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">sayhello.o<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>We can now compile and statically link to <code>libmyfunctions.a<\/code>:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:static]$ gcc -o program program.c -L. -lmyfunctions\n[syd@pi-server:static]$ .\/program 1 2 syd\n1 plus 2 is 3.\nHello there, syd!\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:static]$ gcc -o program program.c -L. -lmyfunctions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:static]$ .\/program 1 2 syd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">plus<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">2<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">is<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #96D0FF\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">Hello<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">there,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd!<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>By default, the linker will look for libraries in <code>\/usr\/lib<\/code>. The <code>-L<\/code> flag in the example above tells the linker about non-standard directories where libraries exist &#8211; in this case, the current directory. The <code>-l<\/code> flag tells the linker to link the specified library. You do not have to use the the leading &#8220;lib&#8221; part of the library filename, or file extension.<\/p>\n\n\n\n<p>You can check shared object dependencies of a Linux executable using:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:static]$ ldd program\n        linux-vdso.so.1 (0x7ea0a000)\n        \/usr\/lib\/arm-linux-gnueabihf\/libarmmem.so (0x76ecf000)\n        libc.so.6 =&gt; \/lib\/arm-linux-gnueabihf\/libc.so.6 (0x76d90000)\n        \/lib\/ld-linux-armhf.so.3 (0x76ee5000)\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:static]$ ldd program<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">linux-vdso.so.1<\/span><span style=\"color: #ADBAC7\"> (0x7ea0a000)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">\/usr\/lib\/arm-linux-gnueabihf\/libarmmem.so<\/span><span style=\"color: #ADBAC7\"> (0x76ecf000)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">libc.so.6<\/span><span style=\"color: #ADBAC7\"> =<\/span><span style=\"color: #F47067\">&gt;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">\/lib\/arm-linux-gnueabihf\/libc.so.6<\/span><span style=\"color: #ADBAC7\"> (0x76d90000)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">\/lib\/ld-linux-armhf.so.3<\/span><span style=\"color: #ADBAC7\"> (0x76ee5000)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The above is verification there is no libmyfunctions.so dependency.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dynamic Linking<\/h2>\n\n\n\n<p>Again using the example code above, let&#8217;s now create a dynamically loaded library (i.e. a &#8220;shared object&#8221;):<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:dynamic]$ gcc -o libmyfunctions.so -shared -fPIC addtwoints.c sayhello.c \n[syd@pi-server:dynamic]$ gcc -o program program.c -L. -lmyfunctions\n[syd@pi-server:dynamic]$ ls -lh\ntotal 36K\n-rw-r--r-- 1 syd syd   42 Feb 24 18:45 addtwoints.c\n-rwxr-xr-x 1 syd syd 7.5K Feb 24 22:59 libmyfunctions.so\n-rw-r--r-- 1 syd syd   46 Feb 24 18:45 myfunctions.h\n-rwxr-xr-x 1 syd syd 8.2K Feb 24 23:00 program\n-rw-r--r-- 1 syd syd  351 Feb 24 18:45 program.c\n-rw-r--r-- 1 syd syd   89 Feb 24 18:45 sayhello.c\n[syd@pi-server:dynamic]$ \n[syd@pi-server:dynamic]$ ldd program\n        linux-vdso.so.1 (0x7ef00000)\n        \/usr\/lib\/arm-linux-gnueabihf\/libarmmem.so (0x76f0c000)\n        libmyfunctions.so =&gt; not found\n        libc.so.6 =&gt; \/lib\/arm-linux-gnueabihf\/libc.so.6 (0x76dcd000)\n        \/lib\/ld-linux-armhf.so.3 (0x76f22000)\n[syd@pi-server:dynamic]$\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:dynamic]$ gcc -o libmyfunctions.so -shared -fPIC addtwoints.c sayhello.c <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:dynamic]$ gcc -o program program.c -L. -lmyfunctions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:dynamic]$ ls -lh<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">total<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">36<\/span><span style=\"color: #96D0FF\">K<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">   <\/span><span style=\"color: #6CB6FF\">42<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">18<\/span><span style=\"color: #96D0FF\">:45<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">addtwoints.c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rwxr-xr-x<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">7.5<\/span><span style=\"color: #96D0FF\">K<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">22<\/span><span style=\"color: #96D0FF\">:59<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">libmyfunctions.so<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">   <\/span><span style=\"color: #6CB6FF\">46<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">18<\/span><span style=\"color: #96D0FF\">:45<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">myfunctions.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rwxr-xr-x<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">8.2<\/span><span style=\"color: #96D0FF\">K<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">23<\/span><span style=\"color: #96D0FF\">:00<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #6CB6FF\">351<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">18<\/span><span style=\"color: #96D0FF\">:45<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program.c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">   <\/span><span style=\"color: #6CB6FF\">89<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">18<\/span><span style=\"color: #96D0FF\">:45<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">sayhello.c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:dynamic]$ <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:dynamic]$ ldd program<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">linux-vdso.so.1<\/span><span style=\"color: #ADBAC7\"> (0x7ef00000)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">\/usr\/lib\/arm-linux-gnueabihf\/libarmmem.so<\/span><span style=\"color: #ADBAC7\"> (0x76f0c000)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">libmyfunctions.so<\/span><span style=\"color: #ADBAC7\"> =<\/span><span style=\"color: #F47067\">&gt;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">not<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">found<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">libc.so.6<\/span><span style=\"color: #ADBAC7\"> =<\/span><span style=\"color: #F47067\">&gt;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">\/lib\/arm-linux-gnueabihf\/libc.so.6<\/span><span style=\"color: #ADBAC7\"> (0x76dcd000)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">\/lib\/ld-linux-armhf.so.3<\/span><span style=\"color: #ADBAC7\"> (0x76f22000)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:dynamic]$<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Notice the results contain: <code>libmyfunctions.so =&gt; not found<\/code>? Let&#8217;s try to execute the program to see what happens:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:dynamic]$ .\/program 1 2 syd\n.\/program: error while loading shared libraries: libmyfunctions.so: cannot open shared object file: No such file or directory\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:dynamic]$ .\/program 1 2 syd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">.\/program:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">error<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">while<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">loading<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">shared<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">libraries:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">libmyfunctions.so:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">cannot<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">open<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">shared<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">object<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">file:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">No<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">such<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">file<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">or<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">directory<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The dynamic library loader failed to file libmyfunctions.so. That&#8217;s because shared object files need to be a particular directories (e.g. \/usr\/lib or \/lib etc&#8230;). There are a number of ways to resolve this:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copy your shard object to <code>\/usr\/lib<\/code> or <code>\/usr\/local\/lib<\/code> or <code>\/lib<\/code>.<\/li>\n\n\n\n<li>Add a new directory to the shared object path (see <code>\/etc\/ld.so.conf.d\/<\/code>).<\/li>\n\n\n\n<li>Set <code>LD_LIBRARY_PATH<\/code> to include the directory containing your .so file(s).<\/li>\n<\/ul>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:dynamic]$ sudo cp libmyfunctions.so \/usr\/local\/lib\/\n[syd@pi-server:dynamic]$ .\/program 2 4 syd\n.\/program: error while loading shared libraries: libmyfunctions.so: cannot open shared object file: No such file or directory\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:dynamic]$ sudo cp libmyfunctions.so \/usr\/local\/lib\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:dynamic]$ .\/program 2 4 syd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">.\/program:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">error<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">while<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">loading<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">shared<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">libraries:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">libmyfunctions.so:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">cannot<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">open<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">shared<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">object<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">file:<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">No<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">such<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">file<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">or<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">directory<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>It still didn&#8217;t work!? That&#8217;s because you have to execute a program called <code>ldconfig<\/code> to rebuild the cache:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:dynamic]$ sudo ldconfig\n[syd@pi-server:dynamic]$ .\/program 2 4 syd\n2 plus 4 is 6.\nHello there, syd!\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:dynamic]$ sudo ldconfig<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:dynamic]$ .\/program 2 4 syd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">2<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">plus<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">4<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">is<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">6<\/span><span style=\"color: #96D0FF\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">Hello<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">there,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd!<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>One of the other options to execute the binary without copying the shared object to another directory and then running <code>ldconfig<\/code> is to set <code>LD_LIBRARY_PATH<\/code>:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:dynamic]$ LD_LIBRARY_PATH=`pwd` .\/program 3 4 syd\n3 plus 4 is 7.\nHello there, syd!\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:dynamic]$ LD_LIBRARY_PATH=<\/span><span style=\"color: #96D0FF\">`<\/span><span style=\"color: #6CB6FF\">pwd<\/span><span style=\"color: #96D0FF\">`<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">.\/program<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">4<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">3<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">plus<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">4<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">is<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">7<\/span><span style=\"color: #96D0FF\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">Hello<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">there,<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd!<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Other Considerations<\/h2>\n\n\n\n<p>Libraries are usually released in shared object form (for dynamic linking), and as archives (for static linking). When there&#8217;s both a dynamic and static version of a library, the dynamic version will always be used by the linker by default. This can be seen by searching for both the dynamic and static versions of libc (which, as can be seen from the ldd output above, is just another library):<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:dynamic]$ sudo find \/usr\/lib -type f -name 'libc.*'\n\/usr\/lib\/arm-linux-gnueabihf\/libc.a\n\/usr\/lib\/arm-linux-gnueabihf\/libc.so\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:dynamic]$ sudo find \/usr\/lib -type f -name <\/span><span style=\"color: #96D0FF\">&#39;libc.*&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">\/usr\/lib\/arm-linux-gnueabihf\/libc.a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">\/usr\/lib\/arm-linux-gnueabihf\/libc.so<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>You can force the linker to use static libraries (whenever possible) by using the <code>-static<\/code> flag:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:static]$ gcc -static -o program program.c -lmyfunctions\n[syd@pi-server:static]$ ls -lh\ntotal 576K\n-rw-r--r-- 1 syd syd   42 Feb 24 18:23 addtwoints.c\n-rw-r--r-- 1 syd syd   46 Feb 24 18:32 myfunctions.h\n-rwxr-xr-x 1 syd syd 557K Feb 25 00:02 program\n-rw-r--r-- 1 syd syd  351 Feb 24 18:36 program.c\n-rw-r--r-- 1 syd syd   89 Feb 24 18:31 sayhello.c\n[syd@pi-server:static]$ ldd program\n        not a dynamic executable\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:static]$ gcc -static -o program program.c -lmyfunctions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:static]$ ls -lh<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">total<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">576<\/span><span style=\"color: #96D0FF\">K<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">   <\/span><span style=\"color: #6CB6FF\">42<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">18<\/span><span style=\"color: #96D0FF\">:23<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">addtwoints.c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">   <\/span><span style=\"color: #6CB6FF\">46<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">18<\/span><span style=\"color: #96D0FF\">:32<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">myfunctions.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rwxr-xr-x<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">557<\/span><span style=\"color: #96D0FF\">K<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">25<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">00<\/span><span style=\"color: #96D0FF\">:02<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">  <\/span><span style=\"color: #6CB6FF\">351<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">18<\/span><span style=\"color: #96D0FF\">:36<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">program.c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F69D50\">-rw-r--r--<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">1<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">syd<\/span><span style=\"color: #ADBAC7\">   <\/span><span style=\"color: #6CB6FF\">89<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">Feb<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">24<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">18<\/span><span style=\"color: #96D0FF\">:31<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">sayhello.c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:static]$ ldd program<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">not<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">a<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">dynamic<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">executable<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Notice the jump in the executable&#8217;s size: from 8.2K to 557K!<\/p>\n\n\n\n<p>If you have both the shared and static version of the myfunctions library but want to link using just the static version (i.e. libmyfunctions.a), here&#8217;s one way you can do it:<\/p>\n\n\n\n<div superb-addons-animation=\"zoomIn\" class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2);opacity: 0;\"><span role=\"button\" tabindex=\"0\" data-code=\"[syd@pi-server:static]$ gcc -o program program.c -Wl,-Bstatic -lmyfunctions -Wl,-Bdynamic\n[syd@pi-server:static]$ ldd program\n        linux-vdso.so.1 (0x7ef5b000)\n        \/usr\/lib\/arm-linux-gnueabihf\/libarmmem.so (0x76ef8000)\n        libc.so.6 =&gt; \/lib\/arm-linux-gnueabihf\/libc.so.6 (0x76db9000)\n        \/lib\/ld-linux-armhf.so.3 (0x76f0e000)\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:static]$ gcc -o program program.c -Wl,-Bstatic -lmyfunctions -Wl,-Bdynamic<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">[syd@pi-server:static]$ ldd program<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">linux-vdso.so.1<\/span><span style=\"color: #ADBAC7\"> (0x7ef5b000)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">\/usr\/lib\/arm-linux-gnueabihf\/libarmmem.so<\/span><span style=\"color: #ADBAC7\"> (0x76ef8000)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">libc.so.6<\/span><span style=\"color: #ADBAC7\"> =<\/span><span style=\"color: #F47067\">&gt;<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">\/lib\/arm-linux-gnueabihf\/libc.so.6<\/span><span style=\"color: #ADBAC7\"> (0x76db9000)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">\/lib\/ld-linux-armhf.so.3<\/span><span style=\"color: #ADBAC7\"> (0x76f0e000)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>How times have changed&#8230; Everything in this tutorial was (as can be seen by the <code>pi-server<\/code> prompt) executed on a Raspberry Pi. If you want to jump in and start messing around with some C\/C++ coding in a Linux environment, an RPi is an ideal place to start.<\/p>\n\n\n\n<p>C\/C++ doesn&#8217;t have to be scary &#8211; it&#8217;s actually fun to code with once you familiarize yourself with how to use the tool-chain. Some of the flags may seem cryptic, but a quick search on the Interwebs will reveal all.<\/p>\n\n\n\n<p>In a future post, I&#8217;ll cover a more realistic project and will do a deep-dive on make files. We may even touch on writing a library using Assembly language (and some of the reasons why you should\/shouldn&#8217;t do this)&#8230;<br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>My parents bought me a TRS-80 model III when I was 13 years of age, and boy did I love my TRS-80! I quickly learnt how to code using the baked in BASIC language, and even familiarized myself with simple Z80 assembly language programming using the magic of BASIC&#8217;s &#8220;peeks&#8221; and &#8220;pokes&#8221;. I recall desperately<a class=\"moretag\" href=\"https:\/\/blog.syddel.uk\/?p=364\"><span class=\"screen-reader-text\">Read more about Linux C\/C++: Compiling and Linking Basics<\/span>[&#8230;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":441,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-364","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-coding"],"_links":{"self":[{"href":"https:\/\/blog.syddel.uk\/index.php?rest_route=\/wp\/v2\/posts\/364","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.syddel.uk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.syddel.uk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.syddel.uk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.syddel.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=364"}],"version-history":[{"count":59,"href":"https:\/\/blog.syddel.uk\/index.php?rest_route=\/wp\/v2\/posts\/364\/revisions"}],"predecessor-version":[{"id":841,"href":"https:\/\/blog.syddel.uk\/index.php?rest_route=\/wp\/v2\/posts\/364\/revisions\/841"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.syddel.uk\/index.php?rest_route=\/wp\/v2\/media\/441"}],"wp:attachment":[{"href":"https:\/\/blog.syddel.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.syddel.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=364"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.syddel.uk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}