Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Static Linking / 11 сообщений из 11, страница 1 из 1
04.07.2007, 10:49
    #34637015
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Static Linking
написал dll (win32 api, vs 2005 sp1) хочу забацать статической библиотекой, но при компиляции выплывают следующие ошибки

ошибкиRString.obj : error LNK2019: unresolved external symbol __imp___wassert referenced in function "public: __thiscall RString::RString(char)" (??0RString@@QAE@D@Z)
RString.obj : error LNK2019: unresolved external symbol __imp__memcpy_s referenced in function "public: __thiscall RString::RString(char const *)" (??0RString@@QAE@PBD@Z)
RString.obj : error LNK2019: unresolved external symbol __imp___wcsdup referenced in function "public: bool __thiscall RString::ConvertToOem(void)" (?ConvertToOem@RString@@QAE_NXZ)
RString.obj : error LNK2019: unresolved external symbol __imp___strdup referenced in function "public: bool __thiscall RString::ConvertToUnicode(void)" (?ConvertToUnicode@RString@@QAE_NXZ)
RString.obj : error LNK2019: unresolved external symbol __imp___strrev referenced in function "public: bool __thiscall RString::MakeReverse(void)" (?MakeReverse@RString@@QAE_NXZ)
RString.obj : error LNK2019: unresolved external symbol __imp___wcsrev referenced in function "public: bool __thiscall RString::MakeReverse(void)" (?MakeReverse@RString@@QAE_NXZ)
RString.obj : error LNK2019: unresolved external symbol __imp___strupr_s referenced in function "public: bool __thiscall RString::MakeUpper(void)" (?MakeUpper@RString@@QAE_NXZ)
RString.obj : error LNK2019: unresolved external symbol __imp___wcsupr_s referenced in function "public: bool __thiscall RString::MakeUpper(void)" (?MakeUpper@RString@@QAE_NXZ)
RString.obj : error LNK2019: unresolved external symbol __imp___wsetlocale referenced in function "public: bool __thiscall RString::MakeUpper(void)" (?MakeUpper@RString@@QAE_NXZ)
RString.obj : error LNK2019: unresolved external symbol __imp___strlwr_s referenced in function "public: bool __thiscall RString::MakeLower(void)" (?MakeLower@RString@@QAE_NXZ)
RString.obj : error LNK2019: unresolved external symbol __imp___wcslwr_s referenced in function "public: bool __thiscall RString::MakeLower(void)" (?MakeLower@RString@@QAE_NXZ)
RString.obj : error LNK2019: unresolved external symbol __imp__strstr referenced in function "char * __cdecl strstr(char *,char const *)" (?strstr@@YAPADPADPBD@Z)
RString.obj : error LNK2019: unresolved external symbol __imp__wcsstr referenced in function "wchar_t * __cdecl wcsstr(wchar_t *,wchar_t const *)" (?wcsstr@@YAPA_WPA_WPB_W@Z)
RString.obj : error LNK2019: unresolved external symbol __imp__wcscspn referenced in function "public: int __thiscall RString::FindOneOf(wchar_t const *,bool,unsigned int)" (?FindOneOf@RString@@QAEHPB_W_NI@Z)

насколько я понимаю, он просто не может найти нужных версий этих функций для сборки статиком

подскажите, что мне делать, может проект не так настроен?

Спасибо!
--------------------------------------------------------------
[не претендую на уникальность]
...
Рейтинг: 0 / 0
04.07.2007, 10:58
    #34637048
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Static Linking
Cerebrum wrote:

> написал dll (win32 api, vs 2005 sp1) хочу забацать статической
> библиотекой, но при компиляции выплывают следующие ошибки
1) Насколько я понимаю, dll - Dynamic Linking, *.lib - Static Linking.
Делаем *.lib?
2) Компилируем что? *.lib или проект с ним?
3) Выглядит так, как если бы не была подключена либа, где эти функции были
объявлены. Нужно залезть в справку и посмотреть, какой *.lib файл требуется
для использования этих функций. (насколько я понимаю, это функции
стандартного CRT), потом прописать его либо на вкладке linking, либо (если
правильно помню, для *.lib) - Librarian.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
04.07.2007, 11:13
    #34637126
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Static Linking
мне нужна dll + lib к ней, но так чтобы не нужно было за собой таскать всякие стандартные msvcr'ы

и еще вопросик

вот к примеру есть библиотека - dll, в ней есть экспортируемый класс объявленный следующим образом

class __declspec(dllexport) CAnyClass
{....блабла....};

если я пишу программу использующую эту библиотеку, то соответственно я подключаю заголовочные файлы, в которых объявлен этот класс, получается что в этой программе этот класс будет опять объявлен как экспортируемый и экзешник будет нести в себе спец. объявление класса для тех, кто захочет его подцепить, но мне этого не нужно, для этого есть dll. Будет ли правильным создать еще один хедер (копию того самого) с интерфейсом этого класса, но уже без упоминания о необходимости экспорта?
--------------------------------------------------------------
[не претендую на уникальность]
...
Рейтинг: 0 / 0
04.07.2007, 11:54
    #34637316
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Static Linking
Cerebrumвот к примеру есть библиотека - dll, в ней есть экспортируемый класс объявленный следующим образом

class __declspec(dllexport) CAnyClass
{....блабла....};

если я пишу программу использующую эту библиотеку, то соответственно я подключаю заголовочные файлы, в которых объявлен этот класс, получается что в этой программе этот класс будет опять объявлен как экспортируемый и экзешник будет нести в себе спец. объявление класса для тех, кто захочет его подцепить, но мне этого не нужно, для этого есть dll. Будет ли правильным создать еще один хедер (копию того самого) с интерфейсом этого класса, но уже без упоминания о необходимости экспорта?
да нет, зачем? нужно в хидере написать конструкцию подобную этой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#ifdef __DLL__
#define DLL_EI __declspec(dllexport)
#else
#define DLL_EI __declspec(dllimport)
#endif

class DLL_EI CAnyClass
{....блабла....};

...
Рейтинг: 0 / 0
04.07.2007, 12:12
    #34637397
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Static Linking
понятно, я думал что эта фича только с функциями работает
--------------------------------------------------------------
[не претендую на уникальность]
...
Рейтинг: 0 / 0
04.07.2007, 12:12
    #34637398
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Static Linking
Cerebrum wrote:

> мне нужна dll + lib к ней, но так чтобы не нужно было за собой таскать
> всякие стандартные msvcr'ы
Тогда надо выставить (не помню где) использование CRT в Multithreaded вместо
Multithreaded DLL. Хотя "таскать MSVCRT" будет экономнее - при таком
раскладе код CRT продублируется и в *.dll и в *.exe.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
04.07.2007, 12:15
    #34637412
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Static Linking
ErVпри таком
раскладе код CRT продублируется и в *.dll и в *.exe.
Posted via ActualForum NNTP Server 1.4
размер не принципиален, да и не сильно разрастется в релизе, программа должна работать сразу на только что установленной машине
...
Рейтинг: 0 / 0
04.07.2007, 12:24
    #34637463
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Static Linking
Cerebrum wrote:

> размер не принципиален, да и не сильно разрастется в релизе, программа
> должна работать сразу на только что установленной машине
Почитай в MSDN статью "Deploying Applications". Там было рассказано, как это
делать. Если не ошибаюсь, надо было манифесты в папку с приложением скинуть
(вместе с *.dll'ками), либо запускать vcredist_x86.exe в случае проблем.
проще всего с Win2k - там схема с манифестами не поддерживается. то есть,
должно работать просто если *.dll'ки в папке с программой.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
04.07.2007, 12:35
    #34637522
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Static Linking
ErV
Почитай в MSDN статью "Deploying Applications". Там было рассказано, как это
делать. Если не ошибаюсь, надо было манифесты в папку с приложением скинуть
(вместе с *.dll'ками), либо запускать vcredist_x86.exe в случае проблем.
проще всего с Win2k - там схема с манифестами не поддерживается. то есть,
должно работать просто если *.dll'ки в папке с программой.
Posted via ActualForum NNTP Server 1.4
я в курсе насчет этого, спс
...
Рейтинг: 0 / 0
04.07.2007, 12:45
    #34637572
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Static Linking
по первому вопросу:

самое интересное что ругается он только на один класс из нескольких десятков, в котором я использовал, как видно из списка ошибок wchar_t
--------------------------------------------------------------
[не претендую на уникальность]
...
Рейтинг: 0 / 0
04.07.2007, 13:00
    #34637632
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Static Linking
для компиляции использую libcmtd.lib
--------------------------------------------------------------
[не претендую на уникальность]
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Static Linking / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]