我正在尝试学习papi api,以监视各种CPU事件的性能。首先,我运行了PAPI官方文档中提到的示例片段之一。下面是代码
#include<stdio.h>
#include <unistd.h>
#include "papi.h"
#define NUM_EVENTS 2
int main()
{
int Events[NUM_EVENTS] = {PAPI_TOT_INS, PAPI_TOT_CYC};
int num1=1234;
int num2=9876;
int res1,res2;
long_long values[NUM_EVENTS];
/* Start counting events */
if (PAPI_start_counters(Events, NUM_EVENTS) != PAPI_OK)
printf("\nerror!!!\n");
//handle_error(1);
/* Do some computation here*/
res1=num1*num2;
printf("\n%d",res1);
/* Read the counters */
if (PAPI_read_counters(values, NUM_EVENTS) != PAPI_OK)
printf("\nerror!!!\n");
/* Do some computation here */
res2=num1+num2;
printf("\n%d",res2);
/* Stop counting events */
if (PAPI_stop_counters(values, NUM_EVENTS) != PAPI_OK)
printf("\nerror!!!\n");
return 0;
}
我用包含文件路径将其编译如下
gcc -I/home/sabarna/Desktop/DEV/clockCycle/papi/src/ papi_try1.c -L/home/sabarna/Desktop/DEV/clockCycle/papi/src/ -lpapi
执行a.out时出现错误
/a.out: error while loading shared libraries: libpapi.so.5: cannot open shared object file: No such file or directory
我尝试通过导出LD_PRELOAD来解决此问题,但这没有用。有人可以帮我吗?我以前从未使用过PAPI api,因此不确定是否以正确的方式进行编译。
最佳答案
没有理由预加载该库,请尝试定义/修改LD_LIBRARY_PATH而不是LD_PRELOAD-L/home/sabarna/Desktop/DEV/clockCycle/papi/src/
似乎表明您已编译但未安装它
如果使用/home/sabarna/Desktop/DEV/clockCycle/papi/src/
设置LD_xxx,则意味着该库必须位于目录/home/sabarna/Desktop/DEV/clockCycle/papi/src/
中,而不是其他位置,因此/home/sabarna/Desktop/DEV/clockCycle/papi/src/libpapy.so
和/或/home/sabarna/Desktop/DEV/clockCycle/papi/src/libpapy.so.<number>
存在
关于c - 无法使用papi.h运行PAPI代码,错误:无法在GCC中打开共享对象文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54494600/