컴파일 및 링크 라인은 무엇을 참조합니까?

컴파일 및 링크 라인은 무엇을 참조합니까?

cudnn 라이브러리를 설치하는 동안 INSTALL.txt파일에서 다음을 발견했습니다.

컴파일 라인에 -I[installpath]를 추가하고 링크 라인에 -L[installpath] -lcudnn을 추가하여 빌드 및 링크 프로세스에 [installpath]를 추가합니다.

컴파일 및 링크 라인은 무엇을 의미합니까? myFile.ccudnn으로 컴파일할 때 이렇게 합니까 :

gcc myFile.c -L /path/to/library -l /name/of/library

아니면 다른 것입니까?

추신: 그들은 또한 다음과 같이 언급했습니다.

cd <installpath>
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH

.bashrc그런데 머신이 실행될 때마다 환경 변수가 설정되도록 이것을 내 파일에 작성해야 합니까 ?

답변1

명령 은 gcc컴파일 단계와 연결 단계를 결합하므로 지정된 모든 옵션을 추가해야 합니다.

gcc -Iincludepath myFile.c -Llibpath -lcudnn

교체는 이용 가능 여부에 includepath따라 달라질 수 있습니다 libpath.

.bashrc예, 설정을 편집해야 할 수도 있습니다 LD_LIBRARY_PATH.

export LD_LIBRARY_PATH=libpath:$LD_LIBRARY_PATH

libpath적절하게 교체하십시오.

includepath.h헤더 파일( file), libpath라이브러리( ) 를 가리켜야 합니다 .so.

답변2

컴파일과 링크는 실행 파일을 만드는 두 가지 주요 단계입니다. 둘 다 명령을 통해 수행할 수 있습니다 gcc. 전처리 단계(컴파일 전)와 어셈블리(컴파일 후)도 있습니다. 이는 거의 항상 컴파일과 동시에 수행되므로 "전처리, 컴파일, 어셈블리"의 조합은 간단히 "컴파일"이라고 하는 간단한 단계로 간주됩니다. .

특정 명령줄에서 수행되는 단계는 gcc다음과 같이 결정될 수 있습니다.

"전처리, 컴파일, 어셈블리, 링크"의 순서를 적어보세요.

입력 파일명을 입력하면 *.i전처리 단계가 제거됩니다( .i해당 파일은 이미 전처리되어 있습니다).

입력 파일 이름을 입력하면 *.s전처리 및 컴파일 단계가 제거됩니다( .s파일이 이미 컴파일되어 있음).

파일 이름을 입력하면 *.o전처리, 컴파일 및 조립 단계가 제거됩니다( .o파일이 이미 조립되어 있음).

옵션 이 있는 경우 -x이전 단계의 입력 파일 이름 대신 사용합니다. (이런 경우는 드뭅니다)

이 옵션을 사용하는 경우 -c링크 단계를 제거하십시오.

이 옵션을 사용하는 경우 -S어셈블리 및 연결 단계를 제거하십시오.

이 옵션을 사용 하면 -E컴파일, 어셈블리 및 연결 단계가 제거됩니다.

요약하면, 입력 파일 유형은 전처리-컴파일-어셈블리-링크 시퀀스에서 시작하는 위치를 결정하고 // -c옵션은 중지할 위치를 결정합니다(각각 , 및 , 유형의 출력 파일을 요청합니다. 출력은 실제로 stdout으로 출력되지만) 기본적으로) .-S-E*.o*.s*.i-E

명령줄에 출력 유형 옵션이 없고 입력 파일 이름이 지정되어 *.c컴파일 라인이 됩니다.그리고연결선. 이는 작은 프로그램을 컴파일하는 일반적인 방법입니다. 더 큰 프로그램의 경우 일반적으로 모든 것을 한 번에 컴파일하고 싶지 않습니다. *.o재사용을 위해 중간 파일을 저장하고 소스 파일이 변경될 때만 다시 컴파일하는 것이 좋습니다 .

"필요에 따라 재컴파일" 개발 주기에는 파일을 gcc -c생성하는 명령(보통 한 번에 하나씩)과 연결을 수행하는 명령이 포함됩니다. 이러한 명령은 일반적으로 Makefile에 있으며 "컴파일 라인" 및 "링크 라인"이라고 합니다.*.ogcc *.o -o theprogram

관련 정보