Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.252.37] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
В 6-й студии написана програмулина, состоящая из 4-х dsp-проектов, сведённых в один dsw-воркспэйс.
Краткое описание проектов: cgi_1 - Configuration type - exe - генерится какая-то вспомогательная утилита lbc_1 - Configuration type - Static Library (.lib) - Даёт библиотеку lbc_1.lib rippa - Configuration type - Static Library (.lib) - должен давать библиотеку rippa_d.lib MyPrj - основной проект - Configuration type - exe - требует для сборки наличие обеих библиотек (lbc_1.lib и rippa_d.lib) есть необходимость собрать эту программулину в 8-й студии (2005): открываю workspace 8-й студией, она предлагает преобразовать все проекты, что я ей милостиво разрешаю. Далее проекты скомпилировал (внеся незначительные правки), а вот линковаться солушн не хочет. выдаёт две ошибки: Цитата Error 67 error LNK2001: unresolved external symbol "class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > > g_LicenseCode1_m_E1" (?g_LicenseCode1_m_E1@@3V?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@A) rippa_d.lib Цитата Error 68 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup libcmtd.lib Переменная CString g_LicenseCode1_m_E1 определена в файле MyPrjDlg.cpp (в проекте MyPrj), CString g_LicenseCode1_m_E1; задефейнена и используется в файле rp.cpp проекта rippa extern CString g_LicenseCode1_m_E1; Этот файл компилируется... но вот с линковкой, как я уже говорил - проблемы. libcmtd.lib - вообще непонятная библиотека. Откуда взялась ссылка на неё - понять не могу. Перерыл файлы по содержимому - этот libcmtd - есть только в obj файлах, а также в библиотеке rippa_d.lib, которая была собрана в 6-й студии. Итак вопросы: 1. как устранить проблему с ненахождением глобально переменной g_LicenseCode1_m_E1. может проблема связана с тем, что MyPrj требует для сборки 2. откуда взялась функция tmainCRTStartup в библиотеке libcmtd.lib? 3. где взять main для несуществующей библиотеке libcmtd.lib? спасибо. |
Сообщ.
#2
,
|
|
|
Такая же бодяга выскакивает и в 6 студии если не те статические DLL подключаешь
типа там SINGL или MULTI дубаг или релиз И ещё, помоему ты всётаки зря смешиваешь CGI код с WIN32 gcc не простит такое!!! |
Сообщ.
#3
,
|
|
|
Да, проблема таки в используемых библиотеках, возможно в тех, кот. подключаются по умолчанию. думаю так потому, что если включаю использование других либ (сейчас точно не помню как, но если нужно, могу сказать точно), то проблема
Цитата уходит, но появляется еуча других: появляются функции дупликаты других либ... как это побороть - не знаю.unresolved external symbol а смешиваю не я: смешано за 2 года до меня, да и gcc мне не понадобится. |
Сообщ.
#4
,
|
|
|
Цитата libcmtd.lib - вообще непонятная библиотека. Очень даже понятная. Это Стандартная Библиотека Времени Выполнения C (статическая мультипоточная дебажная версия). Цитата а также в библиотеке rippa_d.lib, которая была собрана в 6-й студии. Для начала, стоит эту библиотеку пересобрать в MSVC2005 Цитата 1. как устранить проблему с ненахождением глобально переменной g_LicenseCode1_m_E1. может проблема связана с тем, что MyPrj требует для сборки Какой вид подключения MFC в обоих проектах? Цитата 2. откуда взялась функция tmainCRTStartup в библиотеке libcmtd.lib? Это реальная точка входа в приложение. Без неё (или её аналогов) - никак. Цитата 3. где взять main для несуществующей библиотеке libcmtd.lib? Странный вопрос: написать, конечно же. Ты никогда не писал программ вида: #include <stdio.h> int main() { printf("Hello, World!"); } |
Сообщ.
#5
,
|
|
|
Цитата Проект этой либы включен в воркспэйс вместе с тем проектом, где эта либа юзается.Для начала, стоит эту библиотеку пересобрать в MSVC2005 Цитата Точно не помню, кажись статически подклюемые библиотеки. Уточнить (если это принципиально) смогу в понедельник, т.к. сорсы на работе.Какой вид подключения MFC в обоих проектах? Программы такого рода, конечно же, писал, да и проект без функции main не собрался бы в 6й студии. Хочу уточнить, что весь проект в виде исходников в одном воркспейсе собирается под 6й студией. Но вот под 8й - не хочет. Функция main - у меня есть, но почему она ищется в libcmtd.dll - понять не могу. |
Сообщ.
#6
,
|
|
|
Цитата Budda @ Функция main - у меня есть, Покажи тогда её определение. Цитата но почему она ищется в libcmtd.dll - понять не могу. Ну, а где она должна искаться? Она вызывается из __tmainCRTStartup, а та расположена в libcmtd.lib |
Сообщ.
#7
,
|
|
|
Ок. Но ответить смогу уже в понедельник. Ты будешь в инете с начала недели?
|
Сообщ.
#8
,
|
|
|
2Hryak:
По поводу типа используемого MFC: cgi_1 - Not Using MFC lbc_1- Use MFC in Shared DLL rippa - Not Using MFC MyPrj - Use MFC in Shared DLL Надеюсь тебе это чем-то поможет... и мы таки сможем решить проблему сборки под 2005й |
Сообщ.
#9
,
|
|
|
Цитата Budda @ rippa - Not Using MFC MyPrj - Use MFC in Shared DLL Насчет "unresolved external symbol" понятно теперь. Цитата задефейнена и используется в файле rp.cpp проекта rippa extern CString g_LicenseCode1_m_E1; Ты используешь MFC-объекты в не-MFC-проекте. из "class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > > g_LicenseCode1_m_E1" (?g_LicenseCode1_m_E1@@3V?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@A" следует, что объявляется объект типа CString из статической MFC-библиотеки (так происходит по умолчанию). А определен объект совершенно другого типа - CString из динамической (это грубо говоря - на самом деле тут шаблон, но не суть важно). Вообщем, сделай и для rippa - Use MFC in Shared DLL. |
Сообщ.
#10
,
|
|
|
Но ведь в 6й студии собиралось и работало! Почему?
Поменял все типы использования MFC в Use in Shared - не помогло. Кстати, использование CString - я убрал, теперь ругается только на Цитата Error 68 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup libcmtd.lib Изменил проект на Use Standart Windows Libraries... после чего пришлось менять везде Multi-threaded DLL в Multi-threaded... запустил Rebuild Solution... через 10 минут получил сотни две сообщений об ошибках вида: Цитата Error 271 error LNK2001: unresolved external symbol __afxForceEXCLUDE rippa.lib Error 341 error LNK2001: unresolved external symbol __afxForceEXCLUDE lbcdrw_r.lib Error 409 error LNK2001: unresolved external symbol "class AFX_MODULE_STATE * __stdcall AfxGetModuleState(void)" (?AfxGetModuleState@@YGPAVAFX_MODULE_STATE@@XZ) lbcdrw_r.lib Error 415 error LNK2019: unresolved external symbol "class AFX_MODULE_STATE * __stdcall AfxGetModuleState(void)" (?AfxGetModuleState@@YGPAVAFX_MODULE_STATE@@XZ) referenced in function "struct HINSTANCE__ * __stdcall AfxGetInstanceHandle(void)" (?AfxGetInstanceHandle@@YGPAUHINSTANCE__@@XZ) asm_f.obj .... При том многие сообщения дублируются.... ? |
Сообщ.
#11
,
|
|
|
Цитата Budda @ Но ведь в 6й студии собиралось и работало! Почему? Потому что CString изменился в 7-й версии - стал шаблонным типом CStringT, и инстацирование этого шаблона разное для динамической и статической версии MFC. Цитата теперь ругается только на Цитата Error 68 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup libcmtd.lib Ты забыл мне показать определение main. Цитата Изменил проект на Use Standart Windows Libraries... после чего пришлось менять везде Multi-threaded DLL в Multi-threaded... запустил Rebuild Solution... через 10 минут получил сотни две сообщений об ошибках вида: Здрасьте. Ты MFC используешь? Тогда зачем делаешь Use Standart Windows Libraries ? |
Сообщ.
#12
,
|
|
|
многое понял. спасибо
А функции main - нет. Основной проект MyPrj - он типа MFC-application, у него есть class CDVDReplicaApp : public CWinApp Может скинешь в приват свою аську (если есть)? |
Сообщ.
#13
,
|
|
|
Проверь, что в свойствах проекта rippa (да и в другой статической библиотеке на всякий случай) в С/С++ / Code Generation / Runtime Library стоит то же самое, что и для проекта приложения MyPrj (для дебаговой версии там должно быть Multi-threaded Debug DLL).
Если не соответствует, поправь в rippa. |
Сообщ.
#14
,
|
|
|
Проверил, везде соответствует. Сделал ещё раз полный РебилдОлл... то же самое.
вот и всё? Кончились идеи? Или может есть ещё что-нибудь в запасе? Я когда только с этой штукой столкнулся, пытался разобраться что к чему, то нашёл где-то в МСДНе, что "libcmtd.lib" - это одна из дефолтных библиотек, и что этих библиотек несколько и выбор какая именно из них должна подключаться зависит от настроек проекта... Кроме того в настройках проекта можно указать, не юзать дефолтную библиотеку в случае конфликта... играясь с этими опциями я добился того что у меня было много "already defined" функций (т.е. наверное они подключались из нескольких дефолтных библиотек), а проблема "Error 68 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup libcmtd.lib" вроде как ушла... (может из-за того, что перед ней были другие ошибки). Может в "эту" сторону порыть? Но что именно там делать? |
Сообщ.
#15
,
|
|
|
Всё очень просто. libcmtd.lib - это "Multi-threaded Debug" - статическая многопоточная отладочная версия библиотеки времени выполнения C.
Либо: 1. У тебя в одном из связанных проектах используется эта версия библиотеки (см. указанные настройки проекта) 2. Либо ты явно подключаешь её (или в настройках линкера - Additional Dependencies, или прямо где-то в коде #pragma comment(lib, "libcmtd.lib") 3-го не дано, сама по себе она не вылезет. Ищи. |