You should be able to compile list.cpp
, you can’t link it unless you have a main program. (That might be a slight oversimplification.)
The way to compile a source file without linking it depends on what compiler you’re using. If you’re using g++
, the command would be:
g++ -c list.cpp
That will generate an object file containing the machine code for your class. Depending on your compiler and OS, it might be called list.o
or list.obj
.
If you instead try:
g++ list.cpp
it will assume that you’ve defined a main
function and try to generate an executable, resulting in the error you’ve seen (because you haven’t defined a main
function).
At some point, of course, you’ll need a program that uses your class. To do that, you’ll need another .cpp
source file that has a #include "list.h"
and a main()
function. You can compile that source file and link the resulting object together with the object generated from list.cpp
to generate a working executable. With g++
, you can do that in one step, for example:
g++ list.cpp main.cpp -o main
You have to have a main
function somewhere. It doesn’t necessarily have to be in list.cpp
. And as a matter of style and code organization, it probably shouldn’t be in list.cpp
; you might want to be able to use that class from more than one main program.
Home »
C programs »
C common errors programs
Here, we will learn why an error: undefined reference to ‘main’ occurs and how to fix it in C programming language?
Submitted by IncludeHelp, on September 04, 2018
The error: undefined reference to ‘main’ in C program is a very stupid mistake by the programmer, it occurs when the main() function does not exist in the program. If you used main() function and still the error is there, you must check the spelling of the main() function.
Consider the given example, here I wrote mian() instead of main(), see the spelling of main() which is not correct in the program.
Example:
#include <stdio.h> int mian(void) { printf("Hello world!"); return 0; }
Output
/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/Scrt1.o: In function '_start': (.text+0x20): undefined reference to 'main' collect2: error: ld returned 1 exit status
How to fix?
To fix this error, correct the spelling of the main() function.
Correct code:
#include <stdio.h> int main(void) { printf("Hello world!"); return 0; }
Output
Hello world!
C Common Errors Programs »
Undefined reference to main is an error message that indicates that the linker is unable to find a definition for the “main” function during the process of compiling your C or C++ program. This article will explain five factors that can prevent the linker from finding the “main” function in your code and how you can correct the error.
From this, you’ll know more about the importance of the “main” function in your program and why the linker wants it before you can compile your code. To get started, open your project that’s showing the error message, and let’s explain how you can fix it.
Contents
- Why Is There no Reference to “Main”? Discussing All Causes
- – There Is No “Main” Function in Your Code
- – You Did Not Save Your File
- – You Misspelled the “Main” Function
- – You Did Not Add “target_link_libraries()” in Ros
- – You Have a Corrupted Core Compilation Cache File
- How To Ensure a Reference to Main in Your Code?
- – Check the “Main” Function in Your Code
- – Save Your File Before Compilation
- – Check Your Code for Typographical Errors
- – Add the “target_link_libraries()” Command to “Cmakelists”
- – Remove the Corrupted Compilation Cache File
- Conclusion
Why Is There no Reference to “Main”? Discussing All Causes
There is no reference to “main” because of the following:
- There is no “main” function in your code
- You did not save your file
- You misspelt the “main” function
- You did not add “target_link_libraries()” in ROS
- You have a corrupted core compilation cache file
– There Is No “Main” Function in Your Code
The cause of the “undefined reference to main C” error message is that there is no “main” function in your code, or somehow the linker cannot find it. That’s because for a C or C++ program to compile successfully, it should have the “main” function that will serve as the entry point of the application.
For example, there is no “main” function in the following program, and when you run the code using GCC, you’ll get a compiler error message. Part of the latter will be “in function _start’ undefined reference to main’” or, in its full form, it can be “in function _start’: (.text+0x20): undefined reference to `main’“.
void print_message() {
printf(“Hello, world!n”);
}
– You Did Not Save Your File
Not saving your file can lead to an “undefined reference to main” error, and this gets confusing if you already have the “main” function and your compiler is telling you that it cannot find it. And this is true because you’re trying to compile an empty source file without saving your file.
Most compilers will not allow this, and the reason is as follows: the source file in your code editor is still in memory, and you’ve not written it to disk. So, without doing the latter, the compiler will see only an empty C or C++ source file and will throw the error during compilation.
– You Misspelled the “Main” Function
If you misspell the “main” function as “mainn” or another spelling that’s not “main”, the compiler or linker will not be able to find the correct entry point for your program.
This also means that “main” is case-sensitive so if you write “Main” or “MAIN” instead of “main”, the compiler will not recognize it as a valid entry point.
The following is an example and when you compile the code, you’ll get an error:
// Incorrect declaration of “main” function
int MAIN() {
printf(“Hello, world!n”);
return 0;
}
/* The following are also wrong:
int maIn() {
printf(“Hello, world!n”);
return 0;
}
int Main() {
printf(“Hello, world!n”);
return 0;
}*/
– You Did Not Add “target_link_libraries()” in Ros
In ROS (Robot Operating System), if you are compiling a package that includes a node, you need to link the necessary ROS libraries using the “target_link_libraries()” function.
Normally, you’ll do this in your “CMakeLists.txt” file, and if you forget to include it, you can encounter the “undefined reference to `main’ ROS” error when you try to compile your package.
The reason for this error is that ROS nodes are essentially C++ programs that require a main function. When you forget to link the necessary ROS libraries, the linker will not be able to find the definition for the main function that it needs to execute your node.
– You Have a Corrupted Core Compilation Cache File
One possible cause of the “undefined reference to main Arduino” error in Arduino is a corrupted core compilation cache file. This can happen after you update your Arduino IDE or when there are issues with the installation.
Behind the scenes, the core compilation cache file is responsible for caching the compiled code of the Arduino core library. And when it becomes corrupted, it can cause issues with the compilation process.
How To Ensure a Reference to Main in Your Code?
To ensure a reference to “main” in your code, use any of the following methods:
- Check the “main” function in your code
- Save your file before compilation
- Check your code for typographical errors
- Add the “target_link_libraries()” command to “CMakeLists”
- Remove the corrupted compilation cache file
– Check the “Main” Function in Your Code
To solve the “undefined reference to main’ gcc” error, check the “main” function in your code and if it’s not there, you should add it. For example, the following example did not work because there is no “main” function:
void print_message() {
printf(“Hello, world!n”);
}
If you change it to the following, the compiler will compile the code and output “Hello, world!”. This works because we added a “main” function that will serve as the entry point of the program.
void print_message();
int main() {
print_message();
return 0;
}
void print_message() {
printf(“Hello, world!n”);
}
The addition of the “main” function to your code also works if you’re using a makefile, and you’re seeing the “undefined reference to main makefile‘ error.
Finally, if you’re trying to create an executable from multiple source files, you can see the “undefined reference to `main’ cmake” error. To solve this, specify all the required source files in the “add_executable()” command like “add_executable(my_program main.cpp another_source_file.cpp yet_another_source_file.cpp)”. And ensure that the “main” function is defined in one of the source files and is reachable through the code.
– Save Your File Before Compilation
Saving your file before compilation is an important step to ensure that the compiler finds the “main” function in your code. So, after typing your code, always save it with “Ctrl + S” on your keyboard or using the GUI menu of your editor.
You can also configure your text editor or Integrated Development Environment (IDE) to automatically save your changes when you build your project.
For this, select any of the following options that apply to you:
- Visual Studio Code: Go to File > Auto Save or use the keyboard shortcut Ctrl + Shift + P to open the Command Palette and search for “auto-save” to find the relevant options.
- Sublime Text: Go to Preferences > Settings and add the following line to your user settings file: “save_on_build”: true
- Atom: Go to File > Settings > Packages > build > Settings and enable the “Save On Build” option.
- Eclipse: Go to Window > Preferences > Run/Debug > Launching and check the “Always save resources before launching” option.
– Check Your Code for Typographical Errors
Checking your code for typographical errors, especially the spelling of “main” can prevent the undefined reference error. The first thing that you should remember is that “main” is case-sensitive, and always write it as shown in the following code example:
// Correct declaration of “main” function
int main() {
printf(“Hello, world!n”);
return 0;
}
– Add the “target_link_libraries()” Command to “Cmakelists”
Adding the “target_link_libraries()” command to “CmakeLists.txt” in ROS will solve the “undefined reference to main” error. For example, in the following, we use the “target_link_libraries()” function to link the necessary ROS libraries (specified by ${catkin_LIBRARIES}) to the “my_node” executable.
By doing this, the linker will be able to find the definition for the main function and successfully compile your ROS node.
project(my_node)
## Find catkin and any catkin packages
find_package(catkin REQUIRED COMPONENTS roscpp std_msgs)
## Declare a catkin package
catkin_package()
## Build the node
include_directories(include ${catkin_INCLUDE_DIRS})
add_executable(my_node src/my_node.cpp
## Link the necessary ROS libraries
target_link_libraries(my_node ${catkin_LIBRARIES})
– Remove the Corrupted Compilation Cache File
To fix the “undefined reference to main” error while working with Arduino, you can try deleting the cache file and restarting the Arduino IDE. The location of the cache file may vary depending on the operating system and the version of the Arduino IDE.
But it is typically located in the following directory:
- On Windows: C:Users%USERNAME%AppDataLocalArduino15cache
- On macOS: /Users/%USERNAME%/Library/Arduino15/cache
- On Linux: ~/.arduino15/cache
But, if you see the error after selecting Arduino Uno, you should delete the core cache file or all the Arduino files in the following location:
C:Users<your_user_name>AppDataLocalTemparduino-core-cache
Conclusion
This article explained five factors that will cause the “undefined reference to main” error in your code and how you can prevent it. Using the following summary, you’ll reduce the possibility of the error in your code and projects:
- Where your code has no reference to “main”, your compiler will throw an “undefined reference” error.
- Not saving your file and misspelling the “main” function can prevent the linker from finding the “main” function in your code.
- You can solve an “undefined reference” to the main error by including the “main” function in your code and ensuring that you save your code before compiling it.
- In Arduino, you can delete the corrupted compilation cache file if you’re seeing the “undefined reference” to “main” error.
With everything that you’ve learned about the “main” function, you can ensure that your compiler finds it without throwing an undefined reference error. Finally, we’re glad that you have read this far, it means a lot to us, and don’t forget to share our article!
- Author
- Recent Posts
Your Go-To Resource for Learn & Build: CSS,JavaScript,HTML,PHP,C++ and MYSQL. Meet The Team
- Types of Errors in C++
- Fix the
Undefined Reference to main()
Error in C++
This quick tutorial will briefly discuss one of the most common and equally critical errors in C++ programming, i.e., Undefined Reference to main()
.
First, we will briefly discuss different errors that can occur while coding in C++. Then, we will explain the causes and fixes for the Undefined Reference
error.
Types of Errors in C++
Like any other programming language, the C++ codes may be subjected to errors or bugs for multiple reasons. These errors are broadly classified into the following error categories:
- Syntax Errors
- Run-time Errors
- Logical Error
- Linker Error
Syntax Errors are the errors that occur due to violations in the rules of C++ or any syntaxes. Run-time Errors occur when there is no issue in the program syntactically but is detected at the time of execution and lead to a program crash.
Logical Errors occur when we are not getting our desired results or output, which means there is some mistake in the logic of our program. Linker Errors are errors when the program is compiled successfully and tries to link some other objects with our main
object file; thus, the executable is not generated.
Examples are any wrong prototype of the function defined, any incorrect header file included, etc.
Fix the Undefined Reference to main()
Error in C++
This error is most frequently occurring in C++ and is equally critical, especially for new programmers. This type of linker error can affect the running of the program.
These errors mainly occur when the program is compiled successfully and is at the linking phase trying to link other object files with the main
object.
The Undefined Reference
error occurs when we have not included the main()
function in our code. Usually, with multi-file projects, programmers often forget to include the main()
function.
The main()
function is the driver function and serves as the entry point for every program. Therefore, if the main()
function definition is missing, the program generates the error Undefined Reference to main()
.
The syntax for this function is as follows:
int main()
{
//some code here
return 0;
}
«Error: Id returned 1 exit status (an undefined reference to ‘main’)»
is a very common C and C++ linker Error. Just by looking at the statement, we can tell that there is an error in the main function.
In this article, we will talk about the
Id returned 1 exit status
error, the cause behind its occurrence, and a simple way to fix it. So, let’s get started!
What is the main() function?
-
Every C++ and C program contains a mandatory inbuilt function called
main().
-
The
compiler
starts the execution from the main function.
- The compiler automatically invokes the main function and tries to compile all the code line by line from top to bottom.
Linker Error
Linker error generally occurs when we link different invalid object files with the main object file. In this error, the compiler is unable to load the executable file because of the wrong prototyping, and incorrect header files.
Error Cause
Here are the two key causes for the error:
- The user commits some mistakes while writing the main function.
-
The
main()
function is not written in lower case.
Error example:
Example 1
#include <stdio.h>
int Main() // main() is not written in lowercase
{
printf("Welcome to TechGeekBuzz");
return 0;
}
Output:
[Error]: Id returned 1 exit status (undefined reference to 'main')
Example 2
#include <stdio.h>
int kain() // Mistype main() with kain()
{
printf("Welcome to TechGeekBuzz");
return 0;
}
Output
[Error]: Id returned 1 exit status (undefined reference to 'main')
How to Fix the Error?
-
To fix the error, check how you have written the
main()
function. -
The
main()
function must be written in lowercase with correct spelling.
Example
Let’s fix the above-mentioned error examples by writing the code appropriately as shown below:
#include <stdio.h>
int main() {
printf("Welcome to TechGeekBuzz");
return 0;
}
Output
Welcome to TechGeekBuzz
Conclusion
C and C++ are case-sensitive languages, so it is necessary to use the correct letter case while writing the program. The error «undefined reference to main» occurs when we mistype or misspell the main() function.
People are also reading:
-
WAP to Addition, subtraction and multiplication of two numbers
-
C Pattern Programs
-
Features of C
-
C Courses
-
Difference Between C and C++
-
C Matrix Multiplication
-
Best C Books for Beginners
-
C Interview Questions & Answers
-
Objective C vs Swift
-
Call by Value vs Call by Reference