C ++ программа не запускается в Code :: Blocks - PullRequest
2 голосов
/ 03 ноября 2011

При программировании в Code :: Blocks он хорошо компилируется для C, но не для C ++. Даже для программы "Hello World":

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    return 0;
}

выдает эти ошибки:

-------------- Build: Debug in project ---------------

    Compiling: main.cpp
    Linking console executable: bin\Debug\project.exe
    C:\Program Files (x86)\CodeBlocks\MinGW\lib/libstdc++.a(eh_throw.o):eh_throw.cc:(.text+0x7b): undefined reference to `__w32_sharedptr_unexpected'
    C:\Program Files (x86)\CodeBlocks\MinGW\lib/libstdc++.a(eh_throw.o):eh_throw.cc:(.text+0x8c): undefined reference to `__w32_sharedptr_terminate'
    C:\Program Files (x86)\CodeBlocks\MinGW\lib/libstdc++.a(eh_globals.o):eh_globals.cc:(.text+0x4e): undefined reference to `__w32_sharedptr'
    C:\Program Files (x86)\CodeBlocks\MinGW\lib/libstdc++.a(eh_globals.o):eh_globals.cc:(.text+0xb9): undefined reference to `__w32_sharedptr'
    C:\Program Files (x86)\CodeBlocks\MinGW\lib/libstdc++.a(eh_globals.o):eh_globals.cc:(.text+0x179): undefined reference to `__w32_sharedptr'
    C:\Program Files (x86)\CodeBlocks\MinGW\lib/libstdc++.a(eh_globals.o):eh_globals.cc:(.text+0x186): undefined reference to `__w32_sharedptr'
    C:\Program Files (x86)\CodeBlocks\MinGW\lib/libstdc++.a(eh_globals.o):eh_globals.cc:(.text+0x1e3): undefined reference to `__w32_sharedptr'
    C:\Program Files (x86)\CodeBlocks\MinGW\lib/libstdc++.a(eh_globals.o):eh_globals.cc:(.text+0x1ef): more undefined references to `__w32_sharedptr' follow
    C:\Program Files (x86)\CodeBlocks\MinGW\lib/libstdc++.a(eh_terminate.o):eh_terminate.cc:(.text+0x67): undefined reference to `__w32_sharedptr_terminate'
    C:\Program Files (x86)\CodeBlocks\MinGW\lib/libstdc++.a(eh_terminate.o):eh_terminate.cc:(.text+0x97): undefined reference to `__w32_sharedptr_unexpected'
    C:\Program Files (x86)\CodeBlocks\MinGW\lib/libstdc++.a(eh_terminate.o):eh_terminate.cc:(.text+0xb3): undefined reference to `__w32_sharedptr_terminate'
    C:\Program Files (x86)\CodeBlocks\MinGW\lib/libstdc++.a(eh_terminate.o):eh_terminate.cc:(.text+0xd3): undefined reference to `__w32_sharedptr_unexpected'
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 1 seconds)
    12 errors, 0 warnings

1 Ответ

4 голосов
/ 03 ноября 2011

Ошибки, которые вы получаете, указывают на то, что у компоновщика возникли проблемы с поиском __w32_sharedptr, что, вероятно, является зависимостью, необходимой libstdc ++.

Обычно стандартная библиотека и все необходимые ей зависимости автоматически включаются при сборке проекта.Однако, как отмечается в комментарии trojanfoe, это верно только в том случае, если вы компилируете с g ++.Если вы создаете код C ++ с помощью gcc, стандартная библиотека C ++ не будет включена автоматически, поскольку драйвер gcc считает, что компилирует код C.

Чтобы проверить, что на самом деле происходит в настройке вашего кодового блока, перейдите к Настройки -> Компилятор и отладчик -> Глобальные настройки компилятора (слева) -> под Исполняемые файлы цепочки инструментов * вкладка 1013 *.Вы должны увидеть что-то похожее на это:

enter image description here

Если ваша установка выглядит правильно, но по-прежнему отказывается строить правильно, включите полное ведение журнала компилятора и посмотрите, какие команды на самом деле вызываются в IDE,Вы можете найти это в Глобальные настройки компилятора -> Другие настройки tab-> Журнал компилятора = Полная командная строка.Обратите внимание, что вам, возможно, придется немного прокрутить вправо, чтобы найти вкладку.

С включенным полным ведением журнала заново перестройте проект и обновите ваш вопрос с помощью используемых команд.

Это примерно то, чтовы должны увидеть в окне журнала при перестроении с включенными выше опциями:

enter image description here

...