Предупреждение средств компоновщика LNK4217
символ "символ", определенный в "filename_1.obj", импортируется filename_2.obj в функции "function"
__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
Чтобы устранить ошибку, после компиляции двух файлов передайте tt.obj в lib.exe для создания lib-файла, а затем свяжите main.obj с tt.lib, как показано здесь:
cl.exe /c main.cpp tt.cpp
lib.exe tt.obj /export:func /def
link.exe main.obj tt.lib
См. также
Предупреждение средств компоновщика LNK4049
Предупреждение средств компоновщика LNK4286
dllexport, dllimport