2010-07-30 4 views
0

У меня есть библиотека, которая скомпилирована в VS 2005, и я пытаюсь связать ее с одним из старых рабочих мест VC 6, а при связывании я получаю следующие ошибки.Ошибка компиляции при использовании библиотеки VS 2005 в VC6

error LNK2001: unresolved external symbol _sprintf_s 
error LNK2001: unresolved external symbol _strncpy_s 
error LNK2001: unresolved external symbol _strcpy_s  
error LNK2001: unresolved external symbol _strcat_s  
error LNK2001: unresolved external symbol __time64  
unresolved external symbol __alloca_probe_16  
unresolved external symbol _main  
fatal error LNK1120: 7 unresolved externals  
Error executing link.exe. 

Пожалуйста, помогите мне избежать этой ошибки.

ответ

1

Я предполагаю, что вышеуказанное является результатом того, что вы статически связываете исполняемый файл?

Функции _s являются «безопасными» функциями, которые Microsoft добавила в библиотеку времени выполнения, чтобы затруднить запись кода с переполнением буфера. Они были добавлены после VC6 (либо в VS.NET, либо VS2003), и функции не присутствуют в библиотеках времени исполнения VC6, поэтому ваша ссылка не работает. Только два способа обойти это - либо построить весь набор двоичных файлов с VS2005, либо с помощью VC6. Последнее, вероятно, не очень хорошая идея, поскольку для этого потребуется переработать библиотеку, чтобы вместо этого использовать стандартные функции C.

Как правило, не рекомендуется смешивать версии компилятора в статических библиотеках и исполняемых файлах, поскольку библиотеки времени выполнения изменяются, и у вас остались проблемы, подобные этим.

Вы можете превратить свою библиотеку в DLL, но это открывает еще одну банку червей ...

2

_strcpy_s не определен в библиотеках VC6, он был добавлен в VS2005 (или, возможно, VS2002/2003?). Я не думаю, что вокруг есть способ.

AFAIK, обычно не используется библиотека из более ранней версии компилятора с более старой версией компилятора.

Смежные вопросы