2013-10-02 1 views
0

g ++를 사용하여 생성 된 .o 파일과 gfortran을 사용하여 생성 된 다른 .o 파일을 연결하려고합니다. 내가g ++의 .o 파일과 g ++를 사용하는 gfortran을 연결할 때 "__gfortran_pow_c8_i4"오류가 발생합니다.

g++ -O mycppcode.o myfortrancode.o 

내가 얻을 출력 파일을 얻으려면이 두 파일을 연결할 때

g++ -c mycppcode.cpp 

파일 mycppcode.o

gfortran -c myfortrancode.f 

파일 myfortrancode.o

을 생성하는 명령을 생산 다음 오류가 발생했습니다

Undefined symbols for architecture x86_64: 
    "__gfortran_pow_c8_i4", referenced from: 

약간의 도움이 될까요? 다른 컴파일러를 사용해야합니까? 또한 나는 함수 나 서브 루틴이 "__gfortran_pow_c8_i4"라고 부르는 것을 알고 싶다. 그래서 나는 장래에 포트란에서 이러한 함수 나 서브 루틴을 피하려고 노력할 수있다.

+0

링커를 실행할 때'-lgfortran'을 추가하십시오. – SethMMorton

+0

@SethMMorton "ld : -lgfortran에 대해 찾을 수없는 라이브러리" –

+0

이상합니다. 전에 g ++을 성공으로 사용했습니다. [this answer] (http://stackoverflow.com/a/5663224/1399279)를보고 올바르게 입력했는지 확인하십시오. – SethMMorton

답변

2

다음은 GNU 컴파일러 도구를 사용한다고 가정합니다. 다른 컴파일러를 사용하면 상황이 약간 다를 수 있습니다.

두 컴파일러를 함께 사용하여 링크 할 수 있지만 적절한 라이브러리를 제공해야합니다.

일반적으로, 당신이 당신이 두 컴파일러가 서로의 라이브러리에 대해 알고있는 설정을 사용하고 있다고 가정 중 하나

gfortran fortobj.o cppobj.o -lstdc++ 

또는

g++ fortobj.o cppobj.o -lgfortran 

을 사용할 수 있습니다 (같은 당신은 리눅스 저장소를 설치 한 경우). 영업 이익의 경우


은 C 컴파일러는 엑스 코드에서 와서 gfortranhomebrew에서입니다. 이 경우 gfortrang++ 라이브러리 (컴파일러를 컴파일하는 데 사용 되었기 때문에)에 대해 알고 있지만 g++gfortran 라이브러리에 대해 알지 못합니다. 이런 이유로 위에 광고 한대로 gfortran를 사용하여 연결하는 것이 좋습니다. 그러나 libgfortran 할 수있는 경로를 추가 할 필요가 g++와 연결합니다. * 당신이 -L 플래그를 사용하여 링커를 호출 할 때,

g++ fortobj.o cppobj.o -L/path/to/fortran/libs -lgfortran 

같은 몇 가지 이유로 gfortran 컴파일러가 g++ libs가 인식하지 못하는 경우 , 당신은 최종 실행 파일에 어떤 차이가 안된다는

gfortran fortobj.o cppobj.o -L/path/to/c++/libs -lstdc++ 

주의 할 것. 필자는 컴파일러 전문가가 아니지만 컴파일러를 사용하여 개체를 함께 연결하면 사용중인 언어와 연결된 적절한 라이브러리로 링커 (UNIX 계열 OS의 경우 ld)를 호출하는 것이 편리합니다. 따라서 올바른 라이브러리가 포함되어있는 한 컴파일러 또는 다른 라이브러리를 사용하여 연결해야합니다.

+0

@JohnSmith Fortran에서 이러한 서브 루틴과 함수를 피하는 방법에 관한 질문에 대해서는 할 수 없습니다. * Fortran 내장 함수를 사용하고 있다면, Fortran 라이브러리가 누락 된 경우 해당 메시지가 표시됩니다. 제 추측으로는 포트란'포로 (POW) '기능을 사용하고 계신 것 같습니다. – SethMMorton

+2

Fortran (보통)에는'pow' 함수가 없지만'**'연산자를 사용하면 아마도 호출됩니다. –

+0

@VladimirF Fortran을 사용한 이후로 꽤 오래되었습니다 ... 내장 함수에 약간 녹슬 었습니다. 그 점을 지적 해 주셔서 감사합니다. – SethMMorton