C++ - Elfutils 库前向声明错误

问题描述 投票:0回答:1

我目前正在使用 C++ 的 elfutils 库进行工作,我正在努力解决一些应该显而易见的事情。

这是一个 MCVE 显示了我的问题:

文件.cpp

struct Elf64_Sym;

#include <elf.h>

当然,在完整的代码中,前向声明是在 .hpp 文件中完成的,而

<elf.h>
包含是在 .cpp 文件中完成的,但这个小示例重现了完全相同的问题。您可以尝试使用以下命令行来编译它
g++ file.cpp
,您将收到以下错误:

In file included from /usr/include/libelf.h:36,
                 from file.cpp:3:
/usr/include/elf.h:538:3: error: conflicting declaration 'typedef struct Elf64_Sym Elf64_Sym'
  538 | } Elf64_Sym;
      |   ^~~~~~~~~
file.cpp:1:8: note: previous declaration as 'struct Elf64_Sym'
    1 | struct Elf64_Sym;
      |        ^~~~~~~~~

使用 gcc 可以很好地编译(在 C 中也是如此),但在 g++ 中则不行(在 C++ 中也是如此)。

您是否有允许在 C++ 中向前声明

Elf64_Sym
结构的解决方案?

为了完整起见,这里是

<elf.h>
中该结构的定义:

typedef struct
{
  Elf64_Word    st_name;        /* Symbol name (string tbl index) */
  unsigned char st_info;        /* Symbol type and binding */
  unsigned char st_other;       /* Symbol visibility */
  Elf64_Section st_shndx;       /* Section index */
  Elf64_Addr    st_value;       /* Symbol value */
  Elf64_Xword   st_size;        /* Symbol size */
} Elf64_Sym;
c++ forward-declaration
1个回答
0
投票

您是否有允许在 C++ 中前向声明 Elf64_Sym 结构的解决方案?

您根本不需要在源文件中写入

struct Elf64_Sym
,因为您已经包含了具有所需 typedef 的标头。

您可以直接创建

Elf64_Sym
类型的对象,方法是:

Elf64_Sym object;

在源文件中。 工作演示

© www.soinside.com 2019 - 2024. All rights reserved.