- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题可能以前已经被问过。我尽了最大努力也找不到它。
我正在尝试链接libpfm4.5.0
在我的代码中。我正在使用的头文件如下:perf_util.h
这里是下载链接libpfm4.5.0 .
我在哪里包含头文件有关系吗?
这是我的代码片段:
#include "matrix.h"
#include "perf_util.h"
int read_counts(int pid, int app_num){
int ret, i, num_fds = 0, grp, group_fd;
int ready[2], go[2];
char buf;
int nevents;
nevents = TOTAL_NUM_EVENTS;
go[0]=go[1] = -1;
for (grp = 0; grp < nevents; grp++) {
int ret;
ret = perf_setup_list_events(perf_events.pmc[grp], &fds_pid[app_num], &num_fds);
if (ret || !nevents)
exit(1);
}
}
头文件perf_util.h
确实包含perf_setup_list_events
函数但在编译期间
matrix.o: In function `read_counts(int, int)':
matrix.c:(.text+0xf20): undefined reference to `perf_setup_list_events(char const*, perf_event_desc_t**, int*)'
collect2: error: ld returned 1 exit status
这是我收到的错误。我可能会在哪些地方犯错误?任何帮助将不胜感激。
这就是我的编译方式。
g++ -I. -I/libpfm-4.5.0/perf_examples/../include -DCONFIG_PFMLIB_DEBUG -DCONFIG_PFMLIB_OS_LINUX -I. -D_GNU_SOURCE -pthread -w -c matrix.c
g++ -I. -I/libpfm-4.5.0/perf_examples/../include -DCONFIG_PFMLIB_DEBUG -DCONFIG_PFMLIB_OS_LINUX -I. -D_GNU_SOURCE -pthread -w -o matrix matrix.o perf_util.o /libpfm-4.5.0/perf_examples/../lib/libpfm.a
注意:libpfm 使用 cc
进行编译我用g++
。这可能是问题所在吗?如果是的话应该如何解决?
这是我现在编译它的方法:
cc -std=c99 -I. -I/libpfm-4.5.0/perf_examples/../include -DCONFIG_PFMLIB_DEBUG -DCONFIG_PFMLIB_OS_LINUX -I. -D_GNU_SOURCE -pthread -w -c matrix.c
cc -std=c99 -I. -I/libpfm-4.5.0/perf_examples/../include -DCONFIG_PFMLIB_DEBUG -DCONFIG_PFMLIB_OS_LINUX -I. -D_GNU_SOURCE -pthread -w -o matrix matrix.o perf_util.o libpfm-4.5.0/perf_examples/../lib/libpfm.a
error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
const char * pmc[TOTAL_NUM_EVENTS] = {"blah", "blahbar"}
我有一个const char * array
这就是我得到的错误。
最佳答案
好的,所以,与我一开始的想法相反,您的程序是一个C++程序。我们知道是这种情况,因为 C++ 编译器接受它,而 C 编译器不接受。 (你仍然没有给我提供足够的信息来理解为什么 C 编译器不喜欢它,但我怀疑这是一些无趣的事情,比如定义一个无法完全初始化的文件范围变量在编译时。如果您的意思是这是一个 C 程序,您应该就此提出一个新问题。无论如何。)
您使用的库是 C 语言,而不是 C++,并且其头文件未设置为在 C++ 程序中使用。我从错误消息中推断出这是问题所在:
undefined reference to `perf_setup_list_events(char const*, perf_event_desc_t**, int*)'
看看该错误消息如何给出函数 perf_setup_list_events
的完整原型(prototype)?这是因为 C++ 具有函数重载,而 C 没有——因此,在 C++ 中,每个函数都被赋予一个“损坏的名称”,用于对其原型(prototype)进行编码。如果你这样做nm matrix.o | grep perf_setup_list_events
您会发现这个损坏的名称:它可能类似于 _Z22perf_setup_list_eventsPKcPP17perf_event_desc_tPi
。链接器有助于将其再次解码为原型(prototype)。
因此,链接器错误有一个完整的原型(prototype),本身,这一事实告诉我 undefined reference 来自编译为 C++ 的代码。现在,我以前从未听说过 libpfm4.5.0
,但我确实知道,如果您的库实际上没有定义该函数,您会收到不同的错误消息 - - 类似于
错误:“perf_setup_list_events”未在此范围内声明
所以我猜测该库是用 C 而不是 C++ 编写的,并且其头文件不是为处理 C++ 程序使用而编写的。这是库中的一个缺陷,但可以通过编写来解决
extern "C" {
#include "perf_util.h"
}
而不仅仅是简单的#include
。 extern "C"{ ... }
构造告诉 C++ 编译器不要对其中声明的任何内容应用名称修饰。因此,您的程序在以这种方式编译时,会查找名为 perf_setup_list_events
而不是 _Z22perf_setup_list_eventsPKcPP17perf_event_desc_tPi
的符号,并且链接成功。
关于c++ - 对函数 c 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24602178/
我只是有一个更琐碎的问题。 为什么undefined == undefined 返回true,而undefined >= undefined 为false? undefined 等于 undefine
用PHP 7.2编写套接字服务器。根据Firefox 60中的“网络”选项卡,服务器的一些HTTP响应的第一行随机变为undefined undefined undefined。因此,我尝试记录套接字
在 JavaScript 中这是真的: undefined == undefined 但这是错误的: undefined <= undefined 起初我以为<=运算符包含第一个,但我猜它试图将其转换
在回答这个问题 (Difference between [Object, Object] and Array(2)) 时,我在 JavaScript 数组中遇到了一些我以前不知道的东西(具有讽刺意味的
来自https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/of , Note: thi
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
当我添加 到我的 PrimeFaces Mobile 页面,然后我在服务器日志中收到以下警告 WARNING: JSF1064: Unable to find or serve resource, u
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我是一名优秀的程序员,十分优秀!