我写了一个名为“test.c”的C文件,其中包含对麦克风的卸载操作。然后我使用命令“icc -S test.c”将其编译为汇编文件。这产生了两个名为“test.s”和“testMIC.s”的汇编文件。当我继续将它们编译为可执行文件时,会出现以下错误。
使用commad“icc test.s”
/tmp/iccG8ZTVA.o:在函数main':
test.c:(.text+0x30): undefined reference to
__ kmpc_begin'中
test.c :(。text + 0x6f):对__offload_target_acquire'
test.c:(.text+0x11f): undefined reference to
__ offload_offload'的未定义引用
test.c :(。text + 0x15b):未定义引用`__kmpc_end'
使用commad“icc testMIC.s”
/tmp/icc7qv8qX.o:在函数__offload_entry_test_c_10main':
test.c:(.text+0x1d): undefined reference to
__ intel_new_proc_init_R'
test.c :(。text + 0xd5):对__offload_target_enter'
test.c:(.text+0x111): undefined reference to
__ offload_target_leave'的未定义引用
/tmp/icc7qv8qX.o:在函数main':
test.c:(.text+0x140): undefined reference to
__ intel_new_proc_init_R'
使用commad“icc test.s testMIC.s”
/tmp/iccEOtVAs.o:在函数foo':
test.c:(.text+0x170): multiple definition of
foo'中
/tmp/icczmGFBD.o:test.c:(.text+0x170):首先在这里定义
/tmp/iccEOtVAs.o:在函数main':
test.c:(.text+0x128): multiple definition of
main'中
/tmp/icczmGFBD.o:test.c:(.text+0x0):首先在这里定义
/tmp/icczmGFBD.o:在函数main':
test.c:(.text+0x30): undefined reference to
__ kmpc_begin'中
test.c :(。text + 0x6f):对__offload_target_acquire'
test.c:(.text+0x11f): undefined reference to
__ offload_offload'的未定义引用
test.c :(。text + 0x15b):对__kmpc_end'
/tmp/iccEOtVAs.o: In function
__ offload_entry_test_c_10main'的未定义引用:
test.c :(。text + 0x1d):对__intel_new_proc_init_R'
test.c:(.text+0xd5): undefined reference to
__ offload_target_enter'的未定义引用
test.c :(。text + 0x111):对__offload_target_leave'
/tmp/iccEOtVAs.o: In function
main'的未定义引用:
test.c :(。text + 0x140):未定义引用`__intel_new_proc_init_R'
有没有人可以帮我解决这个问题?
test.c:
__attribute__((target(mic)))
int foo(int a, int b){
return a+b;
}
int main()
{
int c = 0;
int a=1, b=2;
#pragma offload target (mic)
{
c = foo(a, b);
}
printf("c: %d\n", c);
return 0;
}
答案 0 :(得分:0)
使用命令
生成两个汇编文件test.s和testMIC.s%icc -S test.c
您应该能够使用以下命令生成可执行文件a.out
%icc test.s
编译器检测到test.s有卸载代码,因此它搜索testMIC.s并链接它们以生成可以从主机运行的可执行文件a.out。
然而,发布" icc testMIC.s"是不正确的。也不是" icc test.s testMIC.s"