ROCm / roctracer

ROCm Tracer Callback/Activity Library for Performance tracing AMD GPUs
https://rocm.docs.amd.com/projects/roctracer/en/latest/
Other
69 stars 30 forks source link

Fix link time multiple definition problem #33

Closed mxz297 closed 4 years ago

mxz297 commented 4 years ago

Using amd-master branch at a64f0538bbe1dd025210a63e7a01979f7fc527b0, I encountered the following linking error:

gpu/amd/.libs/libhpcrun_la-roctracer-activity-translate.o: In function `roctracer_open_pool':
/home/xm13/workspaces/rocm/roctracer/include/roctracer.h:184: multiple definition of `roctracer_open_pool'
sample-sources/.libs/libhpcrun_la-amd.o:/home/xm13/workspaces/rocm/roctracer/include/roctracer.h:184: first defined here
gpu/amd/.libs/libhpcrun_la-roctracer-activity-translate.o: In function `roctracer_close_pool':
/home/xm13/workspaces/rocm/roctracer/include/roctracer.h:193: multiple definition of `roctracer_close_pool'
sample-sources/.libs/libhpcrun_la-amd.o:/home/xm13/workspaces/rocm/roctracer/include/roctracer.h:193: first defined here
gpu/amd/.libs/libhpcrun_la-roctracer-activity-translate.o: In function `roctracer_default_pool':
/home/xm13/workspaces/rocm/roctracer/include/roctracer.h:202: multiple definition of `roctracer_default_pool'
sample-sources/.libs/libhpcrun_la-amd.o:/home/xm13/workspaces/rocm/roctracer/include/roctracer.h:202: first defined here
gpu/amd/.libs/libhpcrun_la-roctracer-activity-translate.o: In function `roctracer_enable_op_activity':
/home/xm13/workspaces/rocm/roctracer/include/roctracer.h:214: multiple definition of `roctracer_enable_op_activity'
sample-sources/.libs/libhpcrun_la-amd.o:/home/xm13/workspaces/rocm/roctracer/include/roctracer.h:214: first defined here
gpu/amd/.libs/libhpcrun_la-roctracer-activity-translate.o: In function `roctracer_enable_domain_activity':
/home/xm13/workspaces/rocm/roctracer/include/roctracer.h:222: multiple definition of `roctracer_enable_domain_activity'
sample-sources/.libs/libhpcrun_la-amd.o:/home/xm13/workspaces/rocm/roctracer/include/roctracer.h:222: first defined here
gpu/amd/.libs/libhpcrun_la-roctracer-activity-translate.o: In function `roctracer_enable_activity':
/home/xm13/workspaces/rocm/roctracer/include/roctracer.h:228: multiple definition of `roctracer_enable_activity'
sample-sources/.libs/libhpcrun_la-amd.o:/home/xm13/workspaces/rocm/roctracer/include/roctracer.h:228: first defined here
gpu/amd/.libs/libhpcrun_la-roctracer-activity-translate.o: In function `roctracer_flush_activity':
/home/xm13/workspaces/rocm/roctracer/include/roctracer.h:244: multiple definition of `roctracer_flush_activity'
sample-sources/.libs/libhpcrun_la-amd.o:/home/xm13/workspaces/rocm/roctracer/include/roctracer.h:244: first defined here

The root cause is that these functions are implemented in roctracter.h and these functions will be included in each compilation unit. At link time, there will be multiple definitions for the same function. One of the fix is to make these functions static inline.