I came across something really weird when I wrote a little lotto program in C++ called "lotto.cpp". Everything was fine until I wrote the write-to-file for my program. When I compiled, it showed me the following error:
ld: can't open output file for writing: lotto, errno=21 for architecture x86_64
collect2: ld returned 1 exit status
By coincidence, I changed the name of my program to "1.cpp", and all of a sudden it compiled without problems. It also worked when I changed the name to "test.cpp".
I am really curious as to why this happened. Any Ideas?
This happened on a MacBook Pro.
If you want the code as well, just let me know!
I know some people asked for the code. Here it is:
#include <iostream>
#include <fstream>
using namespace std;
const int NED = 10;
const int VIKING = 6;
const int NORMAL = 7;
const int MAX = 10;
void quickSort(int arr[], int left, int right);
int checkDuplicates(int arr[], int length);
int main (int argc, const char *argv[])
{
int i, j, k, ans;
char ans2;
int lottoNumbers[MAX];
ofstream out("Lotto.txt", ios::out | ios::app);
srand((unsigned)time(NULL));
do
{
do
{
cout << "\n\nDo you want to play Viking Lotto (press 6), or normal Lotto (press 7): ";
cin >> ans;
}while(ans != VIKING && ans != normal);
(ans == VIKING) ? cout << "\nViking Lotto:\n" : cout << "\n\nnormal Lotto:\n";
(ans == VIKING) ? out << "\nViking Lotto:\n" : out << "\n\nnormal Lotto:\n";
for (i = 0; i < NED; i++) //10 rows
{
for (j = 0; j < ans; j++) //6 or 7 columns
{
(ans == VIKING) ? lottoNumbers[j] = (rand() % 48) + 1 : lottoNumbers[j] = (rand() % 34) + 1;
}
if(checkDuplicates(lottoNumbers, ans) != -1)
{
for(k = 0; k < ans; k++)
{
while(checkDuplicates(lottoNumbers, ans) == lottoNumbers[k])
{
(ans == VIKING) ? lottoNumbers[k] = (rand() % 48) + 1 : lottoNumbers[k] = (rand() % 34) + 1;
}
}
}
quickSort(lottoNumbers, 0, ans - 1);
cout << '\n';
for(j = 0; j < ans; j++)
{
cout << lottoNumbers[j] << '\t';
out << lottoNumbers[j] << '\t';
}
out << '\n';
}
cout << "\n\n";
cout <<"Another lottery ticket (Y/N) ";
cin >> ans2;
}while(ans2 == 'j' || ans2 == 'J');
cout << "\n\nLOTTO NUMBERS WAS WRITTEN TO FILE...\n\n";
return 0;
}
void quickSort(int arr[], int left, int right)
{
int i = left, j = right;
int tmp;
int mid = arr[(left + right) / 2];
while (i <= j)
{
while (arr[i] < mid) i++;
while (arr[j] > mid) j--;
if (i <= j)
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
};
if (left < j) quickSort(arr, left, j);
if (i < right) quickSort(arr, i, right);
}
int checkDuplicates(int arr[], int length)
{
for(int i = 0; i < length; i++)
{
for(int j = i + 1; j < length; j++)
{
if(arr[i] == arr[j]) return arr[j];
}
}
return -1;
}
A compiler takes the program code (source code) and converts the source code to a machine language module (called an object file). Another specialized program, called a linker, combines this object file with other previously compiled object files (in particular run-time modules) to create an executable file.
Header files are typically used for declaration purposes, while source files are used for implementation (definition) purposes. This allows a source (say b. cpp) file to include your header file (say a.h) to call the functions in a.
The main reason for header files is to enable separate compilation of files, and minimize dependencies.
A compilation means to transform a program written in a high-level programming language from source code into object code. Programmers write programs in a form called source code. Source code must go through several steps before it becomes an executable program.
Error number 21 (on MacOS X 10.7.2) is EISDIR: Is a directory
.
The name lotto
seems to be a directory, not a file.
This is a linker error that states that we cannot write to the 'lotto' file on your computer while compiling. My guess is that either your program is still running, or you accidentally created a directory called 'lotto'. It's possible that your write-to-file function is keeping the application running, or itself tried to create a lotto directory.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With