首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >papi_test.h:没有文件或目录

papi_test.h:没有文件或目录
EN

Stack Overflow用户
提问于 2014-02-04 06:33:35
回答 1查看 3K关注 0票数 2

我尝试使用PAPI代码将自己附加到已经运行的代码上,但是在编译时会出现一个错误papi_test.h :没有这样的文件或目录。

代码语言:javascript
复制
    #include "papi_test.h"
    #include <sys/ptrace.h>
    #include <limits.h>
  //  #include<papi.h>

    #ifdef _AIX
    #define _LINUX_SOURCE_COMPAT
    #endif

    #if defined(__FreeBSD__)
    # define PTRACE_ATTACH PT_ATTACH
    # define PTRACE_CONT PT_CONTINUE
    #endif

    int
    main( int argc, char *argv[] )
    {
            int retval, num_tests = 1, tmp, i,j=1;
            int EventSet1 = PAPI_NULL;
            long long **values;
            //long long elapsed_us, elapsed_cyc, elapsed_virt_us, elapsed_virt_cyc;
            char event_name[PAPI_MAX_STR_LEN];;
            const PAPI_hw_info_t *hw_info;
            const PAPI_component_info_t *cmpinfo;
            pid_t pid;

            pid = atoi(argv[1]);

            retval = PAPI_library_init( PAPI_VER_CURRENT );
            if ( retval != PAPI_VER_CURRENT )
                    test_fail_exit( __FILE__, __LINE__, "PAPI_library_init", retval );

            if ( ( cmpinfo = PAPI_get_component_info( 0 ) ) == NULL )
                    test_fail_exit( __FILE__, __LINE__, "PAPI_get_component_info", 0 );

            if ( cmpinfo->attach == 0 )
                    test_skip( __FILE__, __LINE__, "Platform does not support attaching",
                                       0 );

            hw_info = PAPI_get_hardware_info(  );
            if ( hw_info == NULL )
                    test_fail_exit( __FILE__, __LINE__, "PAPI_get_hardware_info", 0 );

            /* add PAPI_TOT_CYC and one of the events in PAPI_FP_INS, PAPI_FP_OPS or
               PAPI_TOT_INS, depending on the availability of the event on the
               platform */
            retval = PAPI_create_eventset(&EventSet1);
            if ( retval != PAPI_OK )
                    test_fail_exit( __FILE__, __LINE__, "PAPI_create_eventset", retval );

            /* Here we are testing that this does not cause a fail */

            retval = PAPI_assign_eventset_component( EventSet1, 0 );
            if ( retval != PAPI_OK )
                    test_fail( __FILE__, __LINE__, "PAPI_assign_eventset_component",
                    retval );

            retval = PAPI_attach( EventSet1, ( unsigned long ) pid );
            if ( retval != PAPI_OK )
                    test_fail_exit( __FILE__, __LINE__, "PAPI_attach", retval );

            sprintf(event_name,"PAPI_LD_INS");

            retval = PAPI_add_event(EventSet1, PAPI_LD_INS);
            if ( retval != PAPI_OK )
                    test_fail_exit( __FILE__, __LINE__, "PAPI_add_event", retval );

            retval = PAPI_add_event(EventSet1, PAPI_SR_INS);
            if ( retval != PAPI_OK )
                    test_fail_exit( __FILE__, __LINE__, "PAPI_add_event", retval );

            retval = PAPI_add_event(EventSet1, PAPI_BR_INS);
            if ( retval != PAPI_OK )

                    if ( retval != PAPI_OK )
                    test_fail_exit( __FILE__, __LINE__, "PAPI_add_event", retval );

            values = allocate_test_space( 1, 3);

            printf("After %d\n",retval);

            retval = PAPI_start( EventSet1 );
            if ( retval != PAPI_OK )
                    test_fail_exit( __FILE__, __LINE__, "PAPI_start", retval );

            printf("Continuing\n");

            //for( i = 0; i < 2000000000; i++) { j += i;}
            sleep ( 10 );
            retval = PAPI_stop( EventSet1, values[0] );
            if ( retval != PAPI_OK )
              test_fail_exit( __FILE__, __LINE__, "PAPI_stop", retval );

            retval = PAPI_cleanup_eventset(EventSet1);
            if (retval != PAPI_OK)
              test_fail_exit( __FILE__, __LINE__, "PAPI_cleanup_eventset", retval );

            retval = PAPI_destroy_eventset(&EventSet1);
            if (retval != PAPI_OK)
              test_fail_exit( __FILE__, __LINE__, "PAPI_destroy_eventset", retval );

            printf( "Test case: 3rd party attach start, stop.\n" );

            printf
                    ( "-------------------------------------------------------------------------\n" );

            printf( "Test type    : \t           1\n" );
            printf( TAB1, "PAPI_LD_INS : \t", ( values[0] )[0] );
            printf( TAB1, "PAPI_SR_INS : \t", ( values[0] )[1] );
            printf( TAB1, "PAPI_BR_INS : \t", ( values[0] )[2] );
            printf
                    ( "-------------------------------------------------------------------------\n" );

            printf( "Verification: none\n" );

            test_pass( __FILE__, values, num_tests );
            exit( 1 );
    }

即使在Papi-5.3.0/src/ctest文件夹中编译文件attach_target.c时,也会出现同样的错误。我希望使用PAPI监视已经在运行的C代码,并将计数器插入到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-10 15:46:48

您缺少了包含路径(可能还有库路径),使用:

代码语言:javascript
复制
gcc -I/path/to/papi/include/dir -c <filename> -L/path/to/papi/libs -lpapi

此外,您可能从Makefile中受益。Here在“如何编写一个简单的Makefile”中给出了很好的解释,大概是从make开始所需的一切。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21545508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档