문제

비슷한 문제를 보려고 시도했지만 내 문제에 도움이되는 문제를 쉽게 찾을 수 없었습니다.

C ++에서 프로젝트를 만들었고 UNIX에서 컴파일, 링크 및 실행을 진행하고 있습니다. 내 특정 문제는 별도의 파일로 선언하는 메소드에 대한 정의되지 않은 참조입니다.

SharedCache.cpp 파일에는 다음과 같은 방법이 있습니다.

int SharedCache::replaceLine(ullong address){
    int evictPID = -1;

    int cacheSet = calcCacheSet( address );
    //random uniformly-distributed value for cache line
    float numLines = static_cast<float>(CACHE_LINES_PER_SET);
    uint cacheLine = static_cast<uint>(uniformDistr( numLines ));

    if(cache[cacheSet][cacheLine] != NULL){
        evictPID = cache[cacheSet][cacheLine]->PID;
    }

    uint PID= calcPID(address);
    uint tag= calcTag(address);

    cache[cacheSet][cacheLine]->setLine(PID, tag); //mutex method

    return PID;
}

라인 uint cacheLine = static_cast<uint>( uniformDistr( numLines )); 다른 파일에서 사용하려는 기능을 호출합니다. 링커 오류는이 메소드에 대한 정의되지 않은 참조입니다.

균일 디스트 (float); 헤더 배포판에 선언되고 분포 .cpp에 정의됩니다. 내 프로젝트 옵션에서 링커 플래그 분포를 설정하고 배포판을 컴파일하여 배포판을 링크 할 수 있는지 확인했습니다.

여기에서 어디로 가야할지 모르겠습니다. 문제가 해결되지 않았기 때문입니다.

도움이 되었습니까?

해결책

그러나 명령 줄에서 kdevelop을 사용하지 않았지만 링크 프로세스에 입력 파일로 배포판을 추가합니다. 대시가 필요하지 않거나 .o 확장자를 떠날 필요가 없습니다.

또는 KDEVENVENT 프로젝트에 분포를 추가 할 수 있습니까? 이렇게하면 자동으로 컴파일되고 연결되어야합니다 (이것은 Visual Studio 또는 Eclipse와 같은 것들에서 작동하는 방식입니다).

다른 팁

어떤 컴파일러/링커 명령이 호출되고 정확한 오류 출력에 대한보다 정확한 정보가 없으면 좋은 답변을 제공하기가 어렵습니다.

그러나 당신이 한 일에 대한 당신의 설명에서 당신은 지나치지 않는 것 같습니다. distributions.o 링커에. 컴파일러/링커가 자동으로 링크 할 객체 파일을 검색하는 다른 언어와 달리 C ++ 링커는 객체를 명시 적으로 링크해야합니다.

여기서 -l 분산물 사용이 잘못되었습니다. -L 플래그는 정적 또는 동적에 연결하는 데 사용됩니다. 도서관 (각각 .a 및 .so 파일의 Linux), 다른 사람을 지정하려고합니다. 객체 파일 링커가 고려해야합니다. 지정 -ldistributions 링커를 찾게합니다 distributions.a 또는 distributions.so 표준 라이브러리 위치에서.

기본적으로 링커 호출은 이제 다음과 같이 보입니다 (아마도 더 많은 플래그와 라이브러리가있을 것입니다).

gcc -o my_program SharedCache.o -ldistributions

분포 코드를 올바르게 연결하려면 (실제와 비교하여 많은 플래그와 라이브러리가 없을 것입니다) :

gcc -o my_program SharedCache.o distributions.o

이것은 누락 된 기호 문제를 해결하고 작동 바이너리를 생성해야합니다 (또는 최소한 다른 오류 ;-)). Kdevelop 에서이 작업을 수행하는 방법은 모르겠습니다.

makefile에 distributions.cpp를 추가 했습니까? 또한 필요한 링커 플래그는 믿습니다 -ldistributions.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top