Je change de base de code en utilisant msvc pour clanger un produit Windows. Si je construis un petit programme de test en utilisant clang sur windows, il construit, relie et fonctionne très bien, mais si je construis une librairie à partir de notre produit qui utilise un intrinsèque, apparaît comme un symbole manquant.Problèmes liant les intrinsèques de msvc en utilisant clang sur les fenêtres
J'ai essayé de compiler à la fois le code de test et notre produit en utilisant l'option --verbose et je ne peux rien voir de différent entre les deux. La seule différence dans la façon dont ils sont appelés est que le grand produit est construit en utilisant fastbuild ce qui nécessite l'utilisation de -c pour empêcher le compilateur d'appeler aussi le linker. Clang ajoute évidemment dans certaines bibliothèques qui manquent quand j'appelle l'éditeur de liens manuellement moi-même, donc quelqu'un peut-il me dire ce qu'ils pourraient être? (Je suis déjà en train de créer un lien dans la librairie crt (libcmt, msvcrt) donc ce n'est pas ça
J'ai commencé à écrire ma propre bibliothèque d'intrinsèques en assemblage, ce qui est amusant, mais ne devrait pas être nécessaire.
Selon la demande, la compilation du code ci-dessous avec clang fonctionne en utilisant directement, c.-à-clang IntrinsicsTest.cpp
produit un exe
IntrinsicsTest.cpp
#include "stdio.h"
#include "intrin.h"
int _tmain(int argc, _TCHAR* argv[])
{
unsigned long long r = __rdtsc();
printf("Intrinsic: %llu\n", r);
}
échoue pourtant à relier un appel par FastBuild:. FBuild.exe -showcmds -clean IntrinsicsTest_debug_x86
clang.exe "\ IntrinsicsTest.cpp" -D_WINDOWS -c -m32 -mfpmath = sse -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: NON /OUT:"...IntrinsicsTest.debug.Win32.exe "" ... \ IntrinsicsTest.obj "-defaultlib: libcmt.lib -INCREMENTAL -MANIFEST/MACHINE: X86/SUBSYSTEM: CONSOLE/OPT: NOICF/OPT: NOREF
IntrinsicsTest.obj: erreur LNK2019: symbole externe non résolu ___rdtsc référencé dans la fonction _wmain ... \ IntrinsicsTest.debug.Win32.exe
LNK1120 erreur fatale: 1 unresolved externals
Les variables intrinsèques sont généralement des extensions de compilateur, et non standard, elles dépendent donc du compilateur. –
Utilisez-vous clang-cl? mingw-w64 clang? MS clang/C2? – melak47
"Clang --version" me donne: 'clang la version 3.8.0 (branches/release_38) Cible: x86_64-pc-windows-msvc modèle Discussion: posix InstalledDir: C: \ Program Files \ LLVM \ bin' – Teknogrebo