2016-12-07 6 views
-3

둘 다 C 코드로 작성한 두 개의 프로그램이 있는데 둘 다 주 기능이 있습니다 (주 기능없이 프로그램을 실행할 수 없었습니다). 이제는 하나의 주 파일을 작성하려고합니다. main.c에서이 두 함수를 호출 할 수 있습니다. 어떻게해야합니까? 제발 제안. 나는 비교적 C 프로그래밍에 새로운입니다.C 코드 : 메인에서 함수 호출

Rk4solution.c

#define beginrk4 main 
int func (double t, const double y[], double f[], void *params) 
{} 
int beginrk4() /*** main function ***/ 

Rk8pdsolution.c

#define beginrk8pd main 
int func (double t, const double y[], double f[], void *params) 
{} 
int beginrk8pd() /*** main function ****/ 

방법이 두 가지를 호출하는 메인 함수를 만드는 방법?

+0

시퀀스 란 무엇입니까? 이 함수들을 어떻게 호출하기를 원합니까? –

+0

2. SO는 프로그램에 기대어 대신 사용할 수 없습니다. –

+0

@SouravGhosh : 시퀀스는 중요하지 않습니다. GSL 라이브러리를 사용하여 2 차 미분 방정식을 풀기 위해이를 만들었습니다. – ausworli

답변

0

댓글을 답으로 변환.

는 각 소스 파일에 func()라는 전역 함수, 또한 당신이 main()에 매핑 함수 이름 beginrk4beginrk8pd 한 쌍을 갖고있는 것 같다. 그것은 두 개의 충돌입니다. 두 개의 func()과 두 개의 main()입니다.

각각 func()에 고유 한 이름을 지정하고 개별 파일에서 main() 기능을 억제해야합니다. 당신은 두 개의 소스 파일, rk4 하나 (예 : rk4.c)와 rk8pd (rk8pd.c) 하나, 2 개의 헤더와 끝까지 (rk4.h) — or possibly one header rk.h — for declaring the functions. You then write a 주() function in a third source file ( main.c`를 rk8pd.h) 다른 호출하는 함수를 선언하고 함수를 선언하는 헤더를 포함합니다.

여전히 main.c:(.text+0xa): undefined reference to `beginrk4'

내가 GCC를 통해 특정 파일 이름을 지정해야합니까 오류 점점?

gcc -I$TACC_GSL_INC -I$TACC_GRVY_INC -L$TACC_GRVY_LIB -L$TACC_GSL_LIB -lgsl -lgslcblas -lgrvy main.c 

예; 세 개의 소스 파일이있는 경우 : main.c, rk4.crk8pd.c을, 당신은 다양한 옵션을 가지고 있지만,

gcc -o rk main.c rk4.c rk8pd.c -lm 

아마 오래 반복되지 main()로하고 func() 당신에게 실행 가능한 프로그램을 생성 할 것이다. 소스 및/또는 목적 파일 다음에 항상 라이브러리 (-lxyz)를 나열하십시오. 항상!