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


Предупреждение средств компоновщика LNK4092

Общий доступный для записи раздел "раздел" содержит перемещения; Образ может не выполняться правильно

Компоновщик выдает это предупреждение всякий раз, когда у вас есть общий раздел, чтобы предупредить вас о потенциально серьезной проблеме.

Один из способов совместного использования данных между несколькими процессами — пометить раздел как "общий". Однако маркировка раздела как общего может привести к проблемам. Например, у вас есть библиотека DLL, содержащая объявления, подобные этому, в разделе общих данных:

int var = 1;
int *pvar = &var;

Компоновщик не может разрешиться pvar , так как его значение зависит от того, где библиотека DLL загружается в память, поэтому она помещает запись перемещений в библиотеку DLL. При загрузке библиотеки DLL в память адрес var можно разрешить и pvar назначить. Если другой процесс загружает ту же библиотеку DLL, но не может загрузить ее на тот же адрес, перемещение адреса var будет обновлено для второго процесса, а адресное пространство первого процесса указывает на неправильный адрес.