лязг "привет, мир!"ошибки ссылок в windows - PullRequest
10 голосов
/ 19 ноября 2011

Я только что скачал исходники CLang, создал рабочее пространство Visual C ++ 10 IDE с помощью CMake и собрал все из Visual C ++ 10.0 (express).

Теперь я получаю кучу ошибок компоновщика в hello world:

d:\dev\test> type con >foo.cpp
#include <iostream>
using namespace std;
int main() { cout << "Hello, cling-clong world!" << endl; }
^Z

d:\dev\test> clang++ foo.cpp
foo-839435.o : error LNK2019: unresolved external symbol __ZSt4cout referenced in function _main
foo-839435.o : error LNK2019: unresolved external symbol __ZdlPv referenced in function __ZNSt14error_categoryD0Ev
foo-839435.o : error LNK2019: unresolved external symbol __ZSt18uncaught_exceptionv referenced in function __ZNSo6sentry
D2Ev
foo-839435.o : error LNK2019: unresolved external symbol ___cxa_rethrow referenced in function __ZNSt8ios_base5clearEib
foo-839435.o : error LNK2019: unresolved external symbol ___cxa_allocate_exception referenced in function __ZNSt8ios_base5clearEib
foo-839435.o : error LNK2019: unresolved external symbol ___cxa_throw referenced in function __ZNSt8ios_base5clearEib
foo-839435.o : error LNK2019: unresolved external symbol __ZSt17iostream_categoryv referenced in function __ZSt15make_er

Так что я могу с этим поделать?

Ответы [ 5 ]

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

Если вы хотите поэкспериментировать с Clang в Windows, я предлагаю использовать версию MinGW, например ту, которую я здесь предоставил (или собрать ее самостоятельно, используя ваш любимый набор инструментов MinGW):

Вам понадобятся пакеты gcc и clang (без суффиксов linux / mac / cygwin) и их распаковка в один и тот же каталог. Clang использует gcc для связи и может ссылаться на libstdc ++ GCC, в значительной степени предоставляя вам доступ к стандартной библиотеке C ++. Исключения работают для 32-битной версии. Мне не повезло с отладочной информацией.

Ведется работа по улучшению поддержки MS для Clang, но это медленно прогрессирующая задача.

2 голосов
/ 19 ноября 2011

Я думаю, здесь есть недоразумение.

Clang (медленно) учат, как анализировать заголовки MFC.Насколько я знаю, Франсуа Пише почти один в этом проекте, но во всей серии заголовков есть только несколько ошибок (!), И, очевидно, стандартная библиотека, поставляемая с разбором VC ++, уже давно завершена.

Однако речь идет о генерации AST , а не генерации кода.В настоящее время Clang не может правильно сгенерировать код для взаимодействия с библиотеками VC ++.Мало того, что название искажено не полностью, но ABI все еще формируется (за последние 2 месяца было множество исправлений для получения правильного заполнения / выравнивания), и существует давняя проблема с исключениями.

Если вы хотите использовать Clang в Windows, вам следует использовать MinGW или MinGW64, см. Ответ Рубена.

1 голос
/ 04 марта 2013

Используйте clang ++ только для компиляции .cpp и затем вместо MS link попробуйте ld linker. У меня работает.

1 голос
/ 19 ноября 2011

В отличие от MinGW gcc, в clang нет библиотеки glibc, поэтому по умолчанию она не имеет стандартной библиотеки или чего-либо еще. Я не знаю, как использовать стандартную библиотеку Visual C ++ с ней, но из того, что вы публикуете, довольно ясно, что по умолчанию она генерирует символы, такие как gcc, поэтому вам нужно использовать ее с glibc или newlib ...

И либо вы указываете путь к библиотеке с помощью -Ldirectory к файлам .lib (или .a для glibc), либо помещаете их в одну из стандартных поисковых систем clang (запустите: clang -v -x c++ -fsyntax-only some file, чтобы увидеть их.)

0 голосов
/ 19 ноября 2011

Поддержка Clang / LLVM для Windows все еще не идеальна. Попробуйте включить эту опцию: -Xclang -cxx-abi -Xclang microsoft. Но я не уверен, правильно ли это работает.

...