Я пытаюсь перенести библиотеку ARM-C для компиляции с x86_64 C ++ и получаю следующую ошибку:
In file included from /usr/include/c++/5/cwchar:44:0,
from /usr/include/c++/5/bits/postypes.h:40,
from /usr/include/c++/5/bits/char_traits.h:40,
from /usr/include/c++/5/string:40,
from MyFile.h:19,
/usr/include/wchar.h:226:20: error: initializer provided for function
__THROW __asm ("wcschr") __attribute_pure__;
^
, где MyFile.h имеет следующееструктура
// comments
#pragma once
// comments
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <string> //<<< line 19
…
Изначально вместо того, что раньше было схожей ошибкой:
In file included from MyFile.h:19:
/usr/include/string.h:73:21: error: initializer provided for function
__THROW __asm ("memchr") __attribute_pure__ __nonnull ((1));
^
Версия компилятора:
GNU C++14 (Ubuntu 5.4.0-6ubuntu1~16.04.11) version 5.4.0 20160609 (x86_64-linux-gnu)
compiled by GNU C version 5.4.0 20160609, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3
ldd (Ubuntu GLIBC 2.23-0ubuntu11) 2.23
Флаги компиляции:
#g++ -O3 -std=c++14 -fpermissive -Wno-system-headers -w
ОБНОВЛЕНИЕ 1:
Я модифицировал Makefile
, а оригинальная версия содержит $@.via
. Например:
@$(COMPILE) -M -MF $(subst .o,.d.tmp,$@) -MT $@ -E $(C_FLAGS) $@.via $< -o $@.preprocessed.c
, и я изменил $@.via
на @$@.via
, потому что я видел, что в старом проекте они делали это так. Однако, если я уйду как $@.via
, я просто получу:
SomeFile.c:1:1 fatal error: OneHeader.h: No such file or directory
Я начинаю думать, что мой Makefile
где-то не так ...
Я неправильно понялопция компилятора ... Несколько строк выше, мой make-файл создает файлы @.via
, передающие DEFINES и INCLUDES
@echo $(patsubst %, '%', $(C_DEFINES)) > $@.via
@echo $(C_INCLUDE) >> $@.via
и эти @.via
файлы передаютсяв качестве дополнительных аргументов для компиляции. Хотя для armcc
поддерживается --via
, см. Здесь , я обнаружил, что для g ++ - согласно gcc doc - синтаксис @<your_file>
. Таким образом, то, что @$@.via
делает, просто анализирует $@.via
в <your_file>.via
.
Теперь я все еще получаю сообщение об ошибке initializer provided for function
.
ОБНОВЛЕНИЕ 2:
Я обнаружил проблему и объяснил, что произошло в разделе ответов. См. Ниже.