Поделиться через


Предупреждение средств компоновщика 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