2014-02-16 6 views
2

У меня возникают проблемы с компилятором VC++. Я установил Windows SDK с компиляторы, библиотеки и заголовки, и попытался скомпилировать тестовую программу следующим образом:Ошибка связи стандартной библиотеки VC++

#include <cstdio> 

int main(int argc, char* argv[]) { 
    printf("%s", "Hello world!"); 
    return 0; 
} 

Это сценарий командной строки, я использую для компиляции:

@echo off 
set clpath=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64 
set clname=cl.exe 
set linkpath=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64 
set linkname=link.exe 
set libpath=/libpath:"C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib" /libpath:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib" 
set includepath=/I "C:\Program Files\Microsoft SDKs\Windows\v7.1\Include" /I "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include" 

set subsystem=console 
set entry=main 
set libfiles= 

set cfiles=hello.cpp 
set objfiles=hello.obj 

set path=%clpath% 
%clname% %includepath% /c %cfiles% 
set path=%linkpath% 
%linkname% %libpath% /subsystem:%subsystem% /entry:%entry% %libfiles% %objfiles% 

И вот результат:

Microsoft (R) C/C++ Optimizing Compiler Version 16.00.30319.01 for x64 
Copyright (C) Microsoft Corporation. All rights reserved. 

hello.cpp 
Microsoft (R) Incremental Linker Version 10.00.30319.01 
Copyright (C) Microsoft Corporation. All rights reserved. 

hello.obj : error LNK2019: unresolved external symbol printf referenced in function main 
hello.exe : fatal error LNK1120: 1 unresolved externals 

программа связывает хорошо до тех пор, пока я не пытаюсь ссылаться на любые стандартные библиотечные функции. Я пробовал общаться с переключателями NODEFAULTLIB и DEFAULTLIB, а также указывать стандартные библиотеки для прямой ссылки, безрезультатно.

ответ

0

Пути вашей библиотеки ошибочны. Эта папка:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib 

содержит библиотеки x86. Таргетинг amd64, так что вам нужны библиотеки amd64, от:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64 

(Вам также нужно правильный путь к библиотеке amd64 для Windows SDK, я не установлен v7.1, так что я не знаю точно, что это такое)

Обратите внимание, что вы можете настроить среду со всеми правильными путями и переменные окружения, просто запустив:.

"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64 

на соответствующую записку, установка /entry:main неверно: точкой входа должна быть точка входа инициализации CRT. Если вы определяете функцию main, то это mainCRTStartup. Линкером будет выбрана эта функция как точка входа по умолчанию, поэтому вам не нужно указывать точку входа, используя /entry.

+0

О! Конечно, как глупо со мной. Большое спасибо! Кроме того, я использовал переключатель ввода, потому что я тоже получал нерешенную ссылку на процедуру инициализации crt, но это, очевидно, также решено сейчас. – glank

0

Попробуйте добавить libcmt.lib к libfiles=

here Нажмите для получения дополнительной информации о связывании с C-LIBS на Windows.

BTW. Главное преимущество запуска VC++ - хорошая IDE. Зачем вам нужно строить его из командной строки?

+0

Я уже пробовал это, не работает. Эта проблема кажется просто странной. И да, я действительно скучаю по моей доброй старой IDE, но я не могу использовать ее прямо сейчас. Причина не очень важна. Кроме того, я просто хотел написать небольшую небольшую программу, занял бы час. Я пытался заставить компоновщика работать нормально уже три часа. – glank

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