Связывание pdcurses с использованием Visual Studio 2010

Это сводит меня с ума. Я просто пытаюсь включить pdcurses (т. е. ncurses для Windows) в тест. программа. Связь, однако, терпит неудачу.

Использование Visual Studio 2010.

Я полностью осведомлен о том, как настроить правильную ссылку на дополнительные библиотеки и перечислить сами библиотеки. Нет радости.

Я пробовал различные готовые сборки на веб-сайте pdcurses. Нет такой удачи.

Я, конечно, прибегнул к сборке из исходников. Используя nmake из командной строки Visual Studio, как предписано. Построен нормально. Нада по ссылке.

Что мне не хватает. Может быть, просто слишком поздно в пятницу...

Вывод ниже:

1>------ Build started: Project: test, Configuration: Debug x64 ------
1>Build started 14/12/2012 16:24:32.
1>InitializeBuildStatus:
1>  Touching "x64\Debug\test.unsuccessfulbuild".
1>ClCompile:
1>  main.c
1>C:\dep\pdcurses\curses.h(160): warning C4005: 'MOUSE_MOVED' : macro redefinition
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincon.h(101) : see previous definition of 'MOUSE_MOVED'
1>main.c(73): warning C4133: 'function' : incompatible types - from 'unsigned short [20]' to 'const char *'
1>ManifestResourceCompile:
1>  All outputs are up-to-date.
1>main.obj : error LNK2019: unresolved external symbol endwin referenced in function main
1>main.obj : error LNK2019: unresolved external symbol wgetch referenced in function main
1>main.obj : error LNK2001: unresolved external symbol __imp_stdscr
1>main.obj : error LNK2019: unresolved external symbol refresh referenced in function main
1>main.obj : error LNK2019: unresolved external symbol printw referenced in function main
1>main.obj : error LNK2019: unresolved external symbol initscr referenced in function main
1>C:\proj\test.exe : fatal error LNK1120: 6 unresolved externals
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.47

person timlukins    schedule 14.12.2012    source источник


Ответы (1)


В порядке. Я чувствую себя довольно глупо. Вот решение для потомков...

Распространяемые двоичные файлы pdcurses являются 32-битными. Я пытался собрать для 64bit.

По сути, я забыл первое правило компоновки: не смешивайте архитектуры.

В частности, при попытке сборки из исходного кода:

1) остерегайтесь запуска неправильной командной строки Visual Studio. По умолчанию в меню «Инструменты» используется x86. Если вы просто попробуете запустить cl.exe, вы обнаружите это.

Вместо этого запустите приглашение из меню «Пуск»: Microsoft Visual Studio 2010->Visual Studio Tools->Visual Studio x64 Win64 Command Prompt (2010)

Затем вызовите сборку, перейдя в каталог pdcurses /win32a и набрав:

nmake -f vcwin32.mak DLL=pdcurses.dll

Кроме того, 2) перед компиляцией pdcurse измените строку 111 файла сборки Windows pdcurses (vcwin32.mak):

cvtres /MACHINE:X64 /NOLOGO /OUT:pdcurses.obj pdcurses.res

(ПРИМЕЧАНИЕ: т.е. архитектура X64!)

Теперь все последовательно. Библиотека pdcurses будет собрана. И он будет связан с моим тестовым приложением, которое (как показывает исходный вывод) я строю на x64.

person timlukins    schedule 14.12.2012
comment
Большое спасибо, это целую вечность ломало мой мозг, почему это не работало!.......... - person Joel; 17.01.2014