Pentru ca simbolul "j1" este deja definit intr-o librarie pe care ai folosit-o, in cazul de fata in math.h.
J0(3) Linux Programmer's Manual J0(3)
NAME
j0, j0f, j0l, j1, j1f, j1l, jn, jnf, jnl, y0, y0f, y0l, y1, y1f, y1l, yn, ynf, ynl - Bessel functions
SYNOPSIS
#include <math.h>
double j0(double x);
double j1(double x);
double jn(int n, double x);
double y0(double x);
double y1(double x);
double yn(int n, double x);
float j0f(float x);
float j1f(float x);
float jnf(int n, float x);
float y0f(float x);
float y1f(float x);
float ynf(int n, float x);
long double j0l(long double x);
long double j1l(long double x);
long double jnl(int n, long double x);
long double y0l(long double x);
long double y1l(long double x);
long double ynl(int n, long double x);
Concluzia: gcc de windows nu e gcc. Implementati si testati pe Linux daca vreti sa fiti sigur ca totul merge asa cum va asteptati.
De fapt, era destul de usor de descifrezi acel mesaj din moment ce avea o singura eroare care spune "error: `long int j1\' redeclared as different kind of symbol". Cand vezi asa ceva, principalul e sa treci peste diversele warninguri (care, evident, nu vor opri compilarea), si sa te uiti direct in locurile in care apare cuvantul "error". Bafta pe viitor in evitarea acestui tip de probleme

.