Ошибка компоновщика: предварительно скомпилированная библиотека VC++ 6.0 с программой VC++ 8.0
Я пытаюсь перекомпилировать некоторый код, который у меня есть, для новой системы. Он включает в себя предварительно скомпилированную статическую библиотеку, для которой у меня нет исходного кода (только заголовок), и эта библиотека была построена с VC++ 6.0 или более старой версии со старыми библиотеками времени выполнения. На моей старой системе, в которой был VC++ 6.0, моя программа была собрана и работала нормально, но я недавно обновил ее, и у меня больше нет доступа к VC++ 6.0, только Express 2008 (9.0 с SP).
Когда я создаю решение, оно компилируется, но имеет следующую ошибку компоновщика:
1> libcpmtd.lib (xlock.obj): ошибка LNK2005: "public: __thiscall std::_Lockit::~_Lockit(void)" (??1_Lockit@std@@QAE@XZ), уже определенный в NOREC.lib(дорожка).obj) 1>LIBCMT.lib(stdexcpt.obj): ошибка LNK2005: "public: __thiscall std::bad_cast::bad_cast(char const *)" (??0bad_cast@std@@QAE@PBD@Z) уже определен в NOREC.lib(track.obj) 1>LIBCMT.lib(stdexcpt.obj): ошибка LNK2005: "public: __thiscall std:: bad_cast:: bad_cast (класс std::bad_cast const &)" (??0bad_cast@std@@QAE@ABV01@@Z) уже определено в NOREC.lib(track.obj) 1>LIBCMT.lib(stdexcpt.obj): ошибка LNK2005: "public: virtual __thiscall std::bad_cast::~bad_cast(void)" (??1bad_cast@std@@UAE@XZ) уже определено в NOREC.lib(track.obj) 1>LINK: фатальная ошибка LNK1104: не удается открыть файл 'libcp.lib'
Любые идеи, как преодолеть эту проблему, будут очень приветствоваться.
4 ответа
Из последней ошибки ссылки, libcp.lib
не может быть найден. Эта библиотека была удалена с VS 2005. Использование /MT
для многопоточной версии.
http://msdn.microsoft.com/en-us/library/abx4dbyh%28v=vs.80%29.aspx
Многопоточная версия libcpmt.lib
который вы получите автоматически с /MT
флаг. Я вижу в первой ошибке, которую вы используете libcpmtd.lib
которая является отладочной версией того же самого. Я не уверен, как вы получаете это, если вы не используете /MTd
, (или если вы, как libcp.lib
ссылается, так как вы должны использовать один или другой, а не оба)
Линкер сообщает вам, что некоторые символы определены более одного раза. Грубая сила, чтобы убедить компоновщика создать ваше целевое изображение, заключается в использовании /FORCE:MULTIPLE, как описано здесь. Я использовал этот переключатель несколько раз.
ССЫЛКА: фатальная ошибка LNK1104: не удается открыть файл 'libcp.lib'
Это ошибка в компоновщике. Просто создайте пустой файл с именем libcp.lib в LIBPATH.
libcp.lib
Вы можете найти в установленной MS Visual Studio 6.0 в
c:\Program Files\Microsoft Visual Studio\VC98\Lib\
каталог.
Просто скопируйте его на свой MSVS 2005/2008/2010
каталог lib (т.е. c:\Program Files\Microsoft Visual Studio 8\VC\lib\
) И все будет хорошо скомпилировано.