Reputation:
I'm trying to use SIMD intrinsics on Clang compiler for Windows and I'm getting undefined symbol error. What am I missing? There is no such a library for intrinsics, the compiler should just know how to put them into the code.
I'm also getting this erro with the MSVC linker.
Just a example code.
#include <xmmintrin.h>
extern inline float
pmath_Sinf(float radians)
{
__m128 radians_ps = _mm_set_ps(0.0f, 0.0f, 0.0f, radians);
return 0.0f;
}
extern inline float
pmath_Cosf(float radians)
{
__m128 radians_ps = _mm_set_ps(0.0f, 0.0f, 0.0f, radians);
return 0.0f;
}
These are the command line output with verbosity.
clang version 12.0.0
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin
"C:\\Program Files\\LLVM\\bin\\clang-cl.exe" -cc1 -triple x86_64-pc-windows-msvc19.28.29333 -emit-obj -mrelax-all -mincremental-linker-compatible --mrelax-relocations -disable-free -main-file-name windows_main.c -mrelocation-model pic -pic-level 2 -mframe-pointer=none -relaxed-aliasing -menable-no-infs -menable-no-nans -menable-unsafe-fp-math -fno-signed-zeros -mreassociate -freciprocal-math -fno-trapping-math -ffp-contract=fast -fno-rounding-math -ffp-exception-behavior=ignore -ffast-math -ffinite-math-only -mconstructor-aliases -munwind-tables -target-cpu x86-64 -mllvm -x86-asm-syntax=intel -tune-cpu generic -D_MT -flto-visibility-public-std -D_VC_NODEFAULTLIB -fno-rtti-data -fms-volatile -fdiagnostics-format msvc -gno-column-info -gcodeview -debug-info-kind=limited -v -nobuiltininc -resource-dir "C:\\Program Files\\LLVM\\lib\\clang\\12.0.0" -D DEVELOPMENT -internal-isystem "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.28.29333\\include" -internal-isystem "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.28.29333\\atlmfc\\include" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.19041.0\\ucrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.19041.0\\shared" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.19041.0\\um" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.19041.0\\winrt" -O0 -Weverything -Werror -Wno-missing-prototypes -Wno-missing-variable-declarations -Wno-cast-align -Wno-language-extension-token -Wno-error=unused-parameter -Wno-error=unused-variable --std=c99 -fdebug-compilation-dir "C:\\Users\\Leonardo\\Desktop\\Projects\\Primal Library\\src\\windows" -ferror-limit 19 -fmessage-length=120 -mstack-probe-size=9999999 -fno-use-cxa-atexit -fms-extensions -fms-compatibility -fms-compatibility-version=19.28.29333 -fdelayed-template-parsing -finline-hint-functions -fcolor-diagnostics -faddrsig -o "C:\\Users\\Leonardo\\AppData\\Local\\Temp\\windows_main-c555fe.obj" -x c windows_main.c
clang -cc1 version 12.0.0 based upon LLVM 12.0.0-6923b0a7 default target x86_64-pc-windows-msvc
ignoring nonexistent directory "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\atlmfc\include"
#include "..." search starts here:
#include <...> search starts here:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt
C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared
C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um
C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt
End of search list.
In file included from windows_main.c:8:
./../math.c(17,10): warning: unused variable 'radians_ps' [-Wunused-variable]
__m128 radians_ps = _mm_set_ps(0.0f, 0.0f, 0.0f, radians);
^
./../math.c(27,10): warning: unused variable 'radians_ps' [-Wunused-variable]
__m128 radians_ps = _mm_set_ps(0.0f, 0.0f, 0.0f, radians);
^
windows_main.c(174,14): warning: unused parameter 'argc' [-Wunused-parameter]
int main(int argc, char* argv[])
^
windows_main.c(174,26): warning: unused parameter 'argv' [-Wunused-parameter]
int main(int argc, char* argv[])
^
4 warnings generated.
"C:\\Program Files\\LLVM\\bin\\lld-link" "-out:..\\..\\build\\windows_development_x64\\primal.exe" "-libpath:C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.28.29333\\lib\\x64" "-libpath:C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.28.29333\\atlmfc\\lib\\x64" "-libpath:C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.19041.0\\ucrt\\x64" "-libpath:C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.19041.0\\um\\x64" "-libpath:C:\\Program Files\\LLVM\\lib\\clang\\12.0.0\\lib\\windows" -nologo -debug /INCREMENTAL:NO /NODEFAULTLIB /OPT:REF /STACK:0x100000,0x100000 /SUBSYSTEM:CONSOLE /WX "C:\\Users\\Leonardo\\AppData\\Local\\Temp\\windows_main-c555fe.obj" kernel32.lib
lld-link: error: undefined symbol: _mm_set_ps
>>> referenced by C:\Users\Leonardo\Desktop\Projects\Primal Library\src\math.c:17
>>> C:\Users\Leonardo\AppData\Local\Temp\windows_main-c555fe.obj:(pmath_Sinf)
>>> referenced by C:\Users\Leonardo\Desktop\Projects\Primal Library\src\math.c:27
>>> C:\Users\Leonardo\AppData\Local\Temp\windows_main-c555fe.obj:(pmath_Cosf)
clang-cl: error: linker command failed with exit code 1 (use -v to see invocation)
Upvotes: 0
Views: 12071
Reputation:
I got it working.
Since I have both Clang and MSVC installed, both of them has its own xmmintrin.h
header file in their include path, since it is compiler specific. I realized that with #include <xmmintrin.h>
, Clang was including the MSVC version, probably because it found first in the PATH. So all I did was use /X
compiler option that makes it stoping searching for include paths, and I created a new xmmintrin.h
file by coping and pasting all I needed from the actual Clang xmmintrin.h
into it.
Thanks everyone for your comments.
Upvotes: 2