다음을 통해 공유


링커 도구 경고 LNK4217

'filename_1.obj'에 정의된 기호 'symbol'은 함수 'function'의 'filename_2.obj'에 의해 가져옵니다.

기호가 같은 이미지의 개체 파일에 정의되어 있더라도 기호에 대해 __declspec(dllimport) 가 지정되었습니다. 이 __declspec(dllimport) 경고를 해결하려면 한정자를 제거합니다.

설명

기호 는 이미지 내에 정의된 기호 이름입니다. 함수 는 기호를 가져오는 함수입니다.

이 경고는 /clr 옵션을 사용하여 컴파일할 때 표시되지 않습니다.

두 모듈을 함께 연결하려는 경우에도 LNK4217 발생할 수 있습니다. 대신 첫 번째 모듈의 가져오기 라이브러리를 사용하여 두 번째 모듈을 컴파일해야 합니다.

// main.cpp
__declspec(dllimport) void func();

int main()
{
    func();
    return 0;
}

그리고

// tt.cpp
// compile with: /c
void func() {}

여기에 표시된 대로 이러한 두 모듈을 컴파일하려고 하면 LNK4217.

cl.exe /c main.cpp tt.cpp
link.exe main.obj tt.obj

오류를 해결하려면 두 파일을 컴파일한 후 lib.exe에 tt.obj를 전달하여 .lib 파일을 만든 다음, 다음과 같이 tt.lib와 기본.obj를 연결합니다.

cl.exe /c main.cpp tt.cpp
lib.exe tt.obj /export:func /def
link.exe main.obj tt.lib

참고 항목

링커 도구 경고 LNK4049
링커 도구 경고 LNK4286
dllexport, dllimport