相关疑难解决方法(0)

共享库和.h文件

我对程序如何使用共享库存有疑问.

当我构建一个共享库(使用-shared -fPIC开关)时,我从外部程序中提供了一些函数.通常我会执行dlopen()来加载库,然后使用dlsym()将所述函数链接到某些函数指针.此方法不涉及任何.h文件.有没有办法避免使用dlopen()和dlsym()并只包含共享库的.h?

这可能是c ++程序如何使用存储在系统共享库中的代码.即仅包括stdlib.h等

c c++ shared-libraries fpic

13
推荐指数
1
解决办法
2万
查看次数

我已经设置了CPUPROFILE环境变量并链接了-lprofiler.为什么gperftools没有启动分析器?

根据gperftools文档,可以使用以下任何方法启动探查器:

  1. CPUPROFILE环境变量设置为将保存配置文件信息的文件名
  2. 执行上述操作,并设置CPUPROFILESIGNAL和发送适当的信号以启动或停止采样.
  3. 呼叫ProfilerStart(filename)ProfileStop()从您的代码直接

所有这三种方法都需要libprofiler.so链接.

当我尝试这个时,第三种方法有效,但是当我只是设置时CPUPROFILE,没有生成分析信息.

不起作用:

$ cat foo.c
#include <stdio.h>

int main(void) {
    printf("Hello, world!\n");
}
$ gcc foo.c -std=c99 -lprofiler -g && CPUPROFILE=foo.prof ./a.out
Hello, world!
$ ls foo.prof
ls: cannot access foo.prof: No such file or directory
Run Code Online (Sandbox Code Playgroud)

工作:

$ cat bar.c
#include <stdio.h>
#include <gperftools/profiler.h>

int main(void) {
    ProfilerStart("bogus_filename");
    printf("Hello, world!\n");
    ProfilerStop();
}
$ gcc -std=c99 bar.c -lprofiler -g && CPUPROFILE=foo.prof ./a.out …
Run Code Online (Sandbox Code Playgroud)

c++ ld gperftools

2
推荐指数
1
解决办法
2024
查看次数

标签 统计

c++ ×2

c ×1

fpic ×1

gperftools ×1

ld ×1

shared-libraries ×1