Показать полную графическую версию : Линкование
При линковании исходников требуется опр. библиотеки. Достаточно ли их скопировать в директорию lib прописанную в переменных средах, и указать в списке необходимых lib в командной строке после link, чтобы проект был построен правильно? если нет, то почему могут возникнуть ошибки типа LNK2001 unresolved external symbol __imp__имя функции, причем функции есть в библиотеке указанной в командной строке
И еще один вопрос: с помощью какой программы можно построить проект в котором присутствует файл sources(примерное содержание ниже), в makefile указана ссылка на этот файл
Содержание примерно следующее:
TARGETNAME=Name
TARGETPATH=obj
TARGETTYPE=MINIPORT
AXP64_FLAGS=/QA21164
INCLUDES=..\inc;..\..\inc
MSC_WARNING_LEVEL=-W4 -WX
MSC_OPTIMIZATION =-0xs
LINKER_FLAGS=/DEF:Name.def /MERGE:.rdata=.data
CBSTRING=;
DDKLIBPATH=$(BASEDIR)\LIB\W2K\i386
TARGETLIBS=$(DDKLIBPATH)\ntoskrnl.lib $(DDKLIBPATH)\hal.lib
SOURCES=ac97.cpp \
calloc.cpp \
bpr.cpp \
<...>
cmd_unhook.cpp \
name.rc
DLLDEF=Name.def
hasherfrog
24-12-2004, 23:10
Достаточно ли их скопировать в директорию lib прописанную в переменных средах, и указать в списке необходимых lib в командной строке после link, чтобы проект был построен правильно?
Да, если я всё правильно понял в вопросе.
если нет, то почему могут возникнуть ошибки типа LNK2001 unresolved external symbol __imp__имя функции, причем функции есть в библиотеке указанной в командной строке
Может, где-то не хватает extern C?
с помощью какой программы
Похоже на "ручную работу".
В ac97.cpp написано:
extern "C" {
#pragma warning ( push, 3 )
#include "ntddk.h"
#pragma warning ( pop )
}
В ntddk.h функция описана:
NTKERNELAPI
PVOID
MmAllocateContiguousMemory (
IN SIZE_T NumberOfBytes,
IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
Файл ntoskrnl.lib при линковании указан.
Но выдается ошибка ac97.obj: error LNK2001: unresolved external symbol __imp__MmAllocateContiguousMemory
В чем может быть причина?Может быть ошибка вызвана неправильной компиляцией, например указаны какие-нибудь лишние флаги при компилировании? Компилируется весь проект вручную в командной строке с помощью cl.exe с указанием всех исходников и с параметрами /nologo /W3 /GX /O2 /D 'WIN32' /D '_WINDOWS' /D '_MBCS' /YX /FD /c
Ошибки на этом этапе не выдаются.
Линкуется сразу весь проект.
hasherfrog
25-12-2004, 19:04
Мммм. А как насчёт /link /defaultlib:ntoskrnl.lib ???
mrcnn, ты решение еще не добыл? :)
У меня тут похожая ситуация, возникла... при подключении сторонних (чужих) классов проявляется (причем классов хоть визуальных (наследники MFC), хоть нет). В настройках проекта всё уже перелопатил, extern "c" пробовал, основные и некоторые другие библиотеки подключать, осталось только все библиотеки что есть (406 штук) попереподключать... тока влом. :)
например при линковке с CMarkup классом:
error LNK2001: unresolved external symbol "public: bool __thiscall CMarkup::SetDoc(char const *)" (?SetDoc@CMarkup@@QAE_NPBD@Z)
fatal error LNK1120: 1 unresolved externals
а при линковке с CSplitterControl:
error LNK2001: unresolved external symbol "public: __thiscall CSplitterControl::CSplitterControl(void)" (??0CSplitterControl@@QAE@XZ)
error LNK2001: unresolved external symbol "public: virtual __thiscall CSplitterControl::~CSplitterControl(void)" (??1CSplitterControl@@UAE@XZ)
fatal error LNK1120: 2 unresolved externals
Даже не понятно, куда копать
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.