We have some offload code that doesn't run because dlopen() fails with undefined symbols. One of the suggestions that I found was to add "-Wl,-zdefs" to the offload linker options, which might bring the undefined symbols to our attention at link time. However, when I do this, even the most simple offload code won't link.
For example:
#include <stdio.h> #pragma offload_attribute(push target(mic)) #include <vector> struct Foo { std::vector<int> bar; }; #pragma offload_attribute(pop) int main(int argc, char * argv[]) { #pragma offload target(mic:0) { printf("Hello world"); Foo* s = new Foo(); } }
I get the following output:
1>------ Build started: Project: TestOffloadLinkage (Intel C++ 14.0), Configuration: Release x64 ------
1>Build started 3/18/2014 10:54:55 AM.
1>InitializeBuildStatus:
1> Touching "x64\Release\TestOffloadLinkage.unsuccessfulbuild".
1>MessageBuildingWithCompiler:
1> Building with Intel(R) C++ Compiler XE 14.0
1>ClCompile:
1> ***** ClCompile (x64 - Intel C++)
1> Main.cpp
1>Link:
1> C:\Users\Me\AppData\Local\Temp\ipo_7292.o: In function `std::_Bit_iterator_base::_M_bump_up()':
1> C:\Users\Me\Documents\Sources\TestOffloadLinkage/Main.cpp:17: undefined reference to `__kmpc_global_thread_num'
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Platforms\x64\PlatformToolsets\Intel C++ Compiler XE 14.0\Microsoft.Cpp.x64.Intel C++ Compiler XE 14.0.targets(977,5): error MSB6006: "xilink.exe" exited with code 1.
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.87
This is really puzzling to me, as I'm not using any threads in this code. I do have /Qopenmp set, and that does seem to be important as it links fine without it. Is this a bug?