2013-09-24 1 views
1

배경 : VAX/OpenVMS에서 원래 개발 된 매우 오래된 포트란 코드 (F77)를 사용하고 있습니다. 사용자 정의 링크가 가능합니다. 즉, 라이브러리에 여러 기호를 정의 할 수 있습니다. 하지만 링커가 특정 심볼을 사용하도록 강제 할 수있는 능력이 주어졌습니다.VS2010/인텔 포트란이 다중으로 정의 된 기호를 찾지 못함

VS2010과 인텔 포트란 2013을 사용하여 링커가 mutiple 라이브러리에있을 때 특정 라이브러리의 심볼 (예 : MYSUBROUTINE)을 강제로 사용할 수있는 방법을 찾고 있습니다.

저는 C++/Fortran 혼합 프로젝트가 있습니다. 사내에서 개발 한 라이브러리는 제 자신이 아니므로 사용되지 않는 서브 루틴을 제거하는 것은 쉽지 않습니다. 따라서 VS2010/인텔 포트란 2013 링커가 특정 서브 루틴을 사용하도록 강제하는 방법을 찾고 있습니다.

많은 기존 코드 하우스, 특히 Fortran을 많이 사용하는 코드 하우스가이 문제를 가지고 있어야하기 때문에이 문제가 우리에게 고유하지 않다고 생각합니다.

+0

문제의 근본 원인은 링커 **가/FORCE : MULTIPLE 옵션을 제외해도 절대 곱셈 기호를 찾지 못하고 항상 .exe를 생성한다는 것입니다. .exe 실행 여부 또는 이미지 문제가 있는지 여부. 따라서 어떤 서브 루틴이 이미지에서 사용되는지를 제어 할 수 있다는 것은 엄청나 다. 당신이 알고있는 겹쳐서 정의 된 기호를 찾는 방법에 대한 조언도 도움이 될 것입니다. 감사! –

답변

1

라이브러리 (.lib)를 검색 할 때 링커는 찾은 첫 번째 일치하는 기호를 사용합니다. 라이브러리는 잘 정의 된 순서로 검색됩니다. 특정 심볼에 대해 다른 라이브러리를 우선 사용하려면 링크 명령 행에서 라이브러리를 먼저 지정하십시오 (Visual Studio 내에서 실행 가능 프로젝트의 링커> 입력> 추가 종속성에서 이전에 나열하십시오)

여러 서브 루틴이있는 경우 라이브러리를 풀고 별도의 단계로 원하는 루틴에 대한 오브젝트 코드를 선택하는 것과 같은 다른 접근 방식을 사용해야합니다.

심볼을 검색 할 때 오브젝트 파일이 라이브러리보다 우선합니다.

곱하기 정의 기호는 오브젝트 파일 (.obj) 내의 기호에만 적용됩니다.

관련 문제