我对程序如何使用共享库存有疑问.
当我构建一个共享库(使用-shared -fPIC开关)时,我从外部程序中提供了一些函数.通常我会执行dlopen()来加载库,然后使用dlsym()将所述函数链接到某些函数指针.此方法不涉及任何.h文件.有没有办法避免使用dlopen()和dlsym()并只包含共享库的.h?
我想这可能是c ++程序如何使用存储在系统共享库中的代码.即仅包括stdlib.h等
根据gperftools文档,可以使用以下任何方法启动探查器:
CPUPROFILE环境变量设置为将保存配置文件信息的文件名CPUPROFILESIGNAL和发送适当的信号以启动或停止采样.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)