Я обмениваюсь большой кодовой базой использованием msvc для clang для продукта Windows. В этом продукте используется большое количество встроенных компиляторов msvc, таких как _InterlockedOr и т. Д. Если я создаю небольшую тестовую программу, использующую clang на окнах, она строит, ссылки и работает просто отлично, но если я создам библиотеку из нашего продукта, которая использует встроенные функции, появляется как недостающий символ.Проблемы с связями msvc intrinsics с использованием clang на окнах
Я пробовал скомпилировать как тестовый код, так и наш продукт с помощью опции --verbose и не обнаруживать ничего другого между ними. Единственное различие в том, как они называются, заключается в том, что большой продукт построен с использованием fastbuild, что требует использования -c, чтобы предотвратить компилятор, вызывающий компоновщик. Clang, очевидно, добавляет в некоторые библиотеки, которые отсутствуют, когда я вызываю компоновщик вручную самостоятельно, так кто-нибудь может сообщить мне, какими они могут быть? (Я уже связываюсь в библиотеке crt (libcmt, msvcrt), так что это не так.
Я начал писать собственную библиотеку встроенных в сборку, которая интересна, но не обязательна.
по желанию, составление следующего кода с лязгом работает при использовании его непосредственно, т.е. clang IntrinsicsTest.cpp
производит ехе
IntrinsicsTest.cpp
#include "stdio.h"
#include "intrin.h"
int _tmain(int argc, _TCHAR* argv[])
{
unsigned long long r = __rdtsc();
printf("Intrinsic: %llu\n", r);
}
Тем не менее не может установить связь при вызове через FastBuild:. FBuild.exe -showcmds -clean IntrinsicsTest_debug_x86
clang.exe "\ IntrinsicsTest.cpp" -D_WINDOWS -c -m32 -mfpmath = сс -D_UNICODE -DUNICODE -fno-RTTI -fexceptions -E ... \ IntrinsicsTest.debug.Win32.lib
Lib .exe/NOLOGO /OUT:"...\IntrinsicsTest.debug.Win32.lib "" ... \ IntrinsicsTest.obj "... \ IntrinsicsTest.debug.Win32.exe
link.exe/NOLOGO/INCREMENTAL: NO /OUT:"...\IntrinsicsTest.debug.Win32.exe "" ... \ IntrinsicsTest.obj "-defaultlib: libcmt.lib -INCREMENTAL -MANIFEST/MACHINE: X86/SUBSYSTEM: CONSOLE/OPT: NOICF/OPT: NOREF
IntrinsicsTest.obj: ошибка LNK2019: неразрешенный внешний символ ___rdtsc, указанный в функции _wmain ... \ IntrinsicsTest.debug.Win32.exe
фатальным LNK1120 ошибки: 1 неразрешенных внешних
Intrinsics обычно являются расширениями компилятора и нестандартными, поэтому они зависят от компилятора. –
Вы используете clang-cl? mingw-w64 clang? MS clang/C2? – melak47
"Clang --version" дает мне: 'лязг версия 3.8.0 (филиалы/release_38) Цель: x86_64-ПК-окна-MSVC Автор модели: InstalledDir POSIX: C: \ Program Files \ LLVM \ bin' – Teknogrebo