Linker Tools Warning LNK4248

 

The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.

The latest version of this topic can be found at Linker Tools Warning LNK4248.

unresolved typeref token (token) for 'type'; image may not run

A type doesn’t have a definition in MSIL metadata.

LNK4248 can occur when there is only a forward declaration for a type in an MSIL module (compiled with /clr), where the type is referenced in the MSIL module, and where the MSIL module is linked with a native module that has a definition for the type.

In this situation, the linker will provide the native type definition in the MSIL metadata, and this may provide for the correct behavior.

However, if a forward type declaration is a CLR type, then the linker's native type definition may not be correct

For more information, see /clr (Common Language Runtime Compilation).

To correct this error

  1. Provide the type definition in the MSIL module.

The following sample generates LNK4248. Define struct A to resolve.

// LNK4248.cpp  
// compile with: /clr /W1  
// LNK4248 expected  
struct A;  
void Test(A*){}  
  
int main() {  
   Test(0);  
}  

The following sample has a forward definition of a type.

// LNK4248_2.cpp  
// compile with: /clr /c  
class A;   // provide a definition for A here to resolve  
A * newA();  
int valueA(A * a);  
  
int main() {  
   A * a = newA();  
   return valueA(a);  
}  

The following sample generates LNK4248.

// LNK4248_3.cpp  
// compile with: /c  
// post-build command: link LNK4248_2.obj LNK4248_3.obj  
class A {  
public:   
   int b;  
};  
  
A* newA() {  
   return new A;  
}  
  
int valueA(A * a) {  
   return (int)a;  
}  

Show: