C: main not found, but it's there | Compilatio

2019-07-20 09:54发布

When I compile two .c files like given below I get a really weird error.

Code for compiling on terminal

  gcc -I. -o main.c matrix.c -lblas -lgfortran

Error:

  /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
  /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
  /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
  /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
  /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
  /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
  /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
  ...

I did a bit of reading and the solution seems to be to add a main file. But I know for a fact I had the main.c file with the int main() in it before compiling. Here's the list of everything before compiling:

  > ls
  errors.txt  main.c  main.c~  matrix.c  matrix.c~  matrix.h  matrix.h~

After compilation this is the list of everything present:

  > ls
  errors.txt  main.c~  matrix.c  matrix.c~  matrix.h  matrix.h~

For some reason my main.c is getting deleted everytime I compile. What's weird is everything was working perfectly till a couple of minutes ago. Can someone help?

3条回答
Explosion°爆炸
2楼-- · 2019-07-20 10:35

-o main.c means the result of the compilation should be written to main.c (default is something like a.out). This is definitely not what you intended, and main.c is being deleted since the compilation fails.

If you meant "turn on optimizations", it's -O (uppercase).

查看更多
虎瘦雄心在
3楼-- · 2019-07-20 10:37
gcc -I. -o main.c matrix.c -lblas -lgfortran

the -o main.c tells the compiler to write its compiled output into the file main.c, which is probably not what you want. You probably want:

gcc -I. -o progname main.c matrix.c -lblas -lgfortran
查看更多
Fickle 薄情
4楼-- · 2019-07-20 10:49

-o Option lets the c compiler save the compiled code in the file whose name is immediately after -o option

By default in the gcc compiler in unix save the compiled out put in a.out file

with -o option we can make it save in desired_filname.out file

查看更多
登录 后发表回答