링커 도구 경고 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