На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> unresolved external symbol , Помогите устранить баг, плиз
    В 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),
    ExpandedWrap disabled
      CString g_LicenseCode1_m_E1;

    задефейнена и используется в файле rp.cpp проекта rippa
    ExpandedWrap disabled
      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?

    спасибо.
    Сообщение отредактировано: Budda -
      Такая же бодяга выскакивает и в 6 студии если не те статические DLL подключаешь
      типа там SINGL или MULTI дубаг или релиз

      И ещё, помоему ты всётаки зря смешиваешь CGI код с WIN32 gcc не простит такое!!!
        Да, проблема таки в используемых библиотеках, возможно в тех, кот. подключаются по умолчанию. думаю так потому, что если включаю использование других либ (сейчас точно не помню как, но если нужно, могу сказать точно), то проблема
        Цитата
        unresolved external symbol
        уходит, но появляется еуча других: появляются функции дупликаты других либ... как это побороть - не знаю.

        а смешиваю не я: смешано за 2 года до меня, да и gcc мне не понадобится.
          Цитата
          libcmtd.lib - вообще непонятная библиотека.

          Очень даже понятная. Это Стандартная Библиотека Времени Выполнения C (статическая мультипоточная дебажная версия).

          Цитата
          а также в библиотеке rippa_d.lib, которая была собрана в 6-й студии.

          Для начала, стоит эту библиотеку пересобрать в MSVC2005

          Цитата
          1. как устранить проблему с ненахождением глобально переменной g_LicenseCode1_m_E1. может проблема связана с тем, что MyPrj требует для сборки

          Какой вид подключения MFC в обоих проектах?

          Цитата
          2. откуда взялась функция tmainCRTStartup в библиотеке libcmtd.lib?

          Это реальная точка входа в приложение. Без неё (или её аналогов) - никак.

          Цитата
          3. где взять main для несуществующей библиотеке libcmtd.lib?

          Странный вопрос: написать, конечно же.
          Ты никогда не писал программ вида:
          ExpandedWrap disabled
            #include <stdio.h>
            int main()
            {
              printf("Hello, World!");
            }
          :wacko:
            Цитата
            Для начала, стоит эту библиотеку пересобрать в MSVC2005
            Проект этой либы включен в воркспэйс вместе с тем проектом, где эта либа юзается.
            Цитата
            Какой вид подключения MFC в обоих проектах?
            Точно не помню, кажись статически подклюемые библиотеки. Уточнить (если это принципиально) смогу в понедельник, т.к. сорсы на работе.
            Программы такого рода, конечно же, писал, :) да и проект без функции main не собрался бы в 6й студии.

            Хочу уточнить, что весь проект в виде исходников в одном воркспейсе собирается под 6й студией. Но вот под 8й - не хочет. Функция main - у меня есть, но почему она ищется в libcmtd.dll - понять не могу.
              Цитата Budda @
              Функция main - у меня есть,

              Покажи тогда её определение.

              Цитата
              но почему она ищется в libcmtd.dll - понять не могу.

              Ну, а где она должна искаться? Она вызывается из __tmainCRTStartup, а та расположена в libcmtd.lib
              Сообщение отредактировано: Hryak -
                Ок. Но ответить смогу уже в понедельник. Ты будешь в инете с начала недели?
                  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й
                    Цитата 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.
                      Но ведь в 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... :ph34r: :wall: >:( через 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
                      ....

                      При том многие сообщения дублируются....

                      ?
                        Цитата 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... :ph34r: :wall: >:( через 10 минут получил сотни две сообщений об ошибках вида:

                        Здрасьте. Ты MFC используешь? Тогда зачем делаешь Use Standart Windows Libraries ?
                        Сообщение отредактировано: Hryak -
                          многое понял. спасибо

                          А функции main - нет. Основной проект MyPrj - он типа MFC-application, у него есть
                          ExpandedWrap disabled
                            class CDVDReplicaApp : public CWinApp
                          , т.е. объект приложения, порождённый от CWinApp...

                          Может скинешь в приват свою аську (если есть)?
                            Проверь, что в свойствах проекта rippa (да и в другой статической библиотеке на всякий случай) в С/С++ / Code Generation / Runtime Library стоит то же самое, что и для проекта приложения MyPrj (для дебаговой версии там должно быть Multi-threaded Debug DLL).
                            Если не соответствует, поправь в rippa.
                              Проверил, везде соответствует. Сделал ещё раз полный РебилдОлл... то же самое.

                              вот и всё? Кончились идеи? Или может есть ещё что-нибудь в запасе? Я когда только с этой штукой столкнулся, пытался разобраться что к чему, то нашёл где-то в МСДНе, что "libcmtd.lib" - это одна из дефолтных библиотек, и что этих библиотек несколько и выбор какая именно из них должна подключаться зависит от настроек проекта...
                              Кроме того в настройках проекта можно указать, не юзать дефолтную библиотеку в случае конфликта... играясь с этими опциями я добился того что у меня было много "already defined" функций (т.е. наверное они подключались из нескольких дефолтных библиотек), а проблема "Error 68 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup libcmtd.lib" вроде как ушла... (может из-за того, что перед ней были другие ошибки).

                              Может в "эту" сторону порыть? Но что именно там делать?
                                Всё очень просто. libcmtd.lib - это "Multi-threaded Debug" - статическая многопоточная отладочная версия библиотеки времени выполнения C.
                                Либо:
                                1. У тебя в одном из связанных проектах используется эта версия библиотеки (см. указанные настройки проекта)
                                2. Либо ты явно подключаешь её (или в настройках линкера - Additional Dependencies, или прямо где-то в коде #pragma comment(lib, "libcmtd.lib")
                                3-го не дано, сама по себе она не вылезет.
                                Ищи.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0449 ]   [ 16 queries used ]   [ Generated: 23.04.24, 09:15 GMT ]