Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Линкование

Ответить
Настройки темы
Линкование

Ветеран


Сообщения: 1405
Благодарности: 135

Профиль | Отправить PM | Цитировать


При линковании исходников требуется опр. библиотеки. Достаточно ли их скопировать в директорию 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

Отправлено: 03:01, 24-12-2004

 

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Цитата:
Достаточно ли их скопировать в директорию lib прописанную в переменных средах, и указать в списке необходимых lib в командной строке после link, чтобы проект был построен правильно?
Да, если я всё правильно понял в вопросе.

Цитата:
если нет, то почему могут возникнуть ошибки типа LNK2001 unresolved external symbol __imp__имя функции, причем функции есть в библиотеке указанной в командной строке
Может, где-то не хватает extern C?

Цитата:
с помощью какой программы
Похоже на "ручную работу".

Отправлено: 23:10, 24-12-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1405
Благодарности: 135

Профиль | Отправить PM | Цитировать


В 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
Ошибки на этом этапе не выдаются.
Линкуется сразу весь проект.

-------
Ehhh.. what's up, doc?..


Отправлено: 11:50, 25-12-2004 | #3


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Мммм. А как насчёт /link /defaultlib:ntoskrnl.lib ???

Отправлено: 19:04, 25-12-2004 | #4


Ветеран


Сообщения: 1405
Благодарности: 135

Профиль | Отправить PM | Цитировать


Нет. Не работает.


Отправлено: 21:17, 25-12-2004 | #5


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


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

Даже не понятно, куда копать

Отправлено: 05:05, 30-03-2005 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Линкование

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено




 
Переход