Ошибка предварительного объявления библиотеки ElfutilsC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка предварительного объявления библиотеки Elfutils

Сообщение Anonymous »

В настоящее время я работаю на C++ с библиотекой elfutils и пытаюсь решить кое-что, что должно быть очевидно.
Вот MCVE, который показывает мою проблему:
file.cpp
struct Elf64_Sym;

#include

Конечно, в полном коде предварительное объявление выполняется в файле .hpp, а включение выполняется в файле .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++).
Есть ли у вас решение, которое позволило бы предварительное объявление структуры Elf64_Sym в C++?
И для полноты картины вот определение этой структуры в :
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;

Обновленный MCVE

Вот MCVE, который показывает мою проблему (и спасибо @user12002570 за указание на то, что мой предыдущий MCVE был неправильным) :
file.hpp
#ifndef FILE_HPP
#define FILE_HPP

#include

struct Elf64_Sym;

uint64_t getSize(Elf64_Sym * ptr);

#endif

file.cpp
#include "file.hpp"
#include

uint64_t getSize(Elf64_Sym * ptr)
{
return ptr->st_size;
}

Вы можете попробовать скомпилировать его, используя следующую командную строку g++ -c file.cpp, и вы получите следующую ошибку:
/usr/include/elf.h:538:3: error: conflicting declaration 'typedef struct Elf64_Sym Elf64_Sym'
538 | } Elf64_Sym;
| ^~~~~~~~~
In file included from file.cpp:1:
file.hpp:6:8: note: previous declaration as 'struct Elf64_Sym'
6 | struct Elf64_Sym;
| ^~~~~~~~~

Есть ли у вас решение, которое позволило бы предварительное объявление структуры Elf64_Sym в C++?
И для полноты картины вот определение этой структуры в :
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;


Подробнее здесь: https://stackoverflow.com/questions/786 ... tion-error
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»