g ++ — проблемы с компиляцией файла c ++, включая exprTk

У меня есть некоторые проблемы при компиляции кода на C ++, включая exprtk. Я хочу скомпилировать данный пример пакета (я назвал его parser.cpp):

#include <cstdio>
#include <string>
#include "exprtk.hpp"

template <typename T>
void trig_function()
{
typedef exprtk::symbol_table<T> symbol_table_t;
typedef exprtk::expression<T>     expression_t;
typedef exprtk::parser<T>             parser_t;

std::string expression_string = "clamp(-1.0,sin(2 * pi * x) + cos(x / 2 * pi),+1.0)";

T x;

symbol_table_t symbol_table;
symbol_table.add_variable("x",x);
symbol_table.add_constants();

expression_t expression;
expression.register_symbol_table(symbol_table);

parser_t parser;
parser.compile(expression_string,expression);

for (x = T(-5); x <= T(+5); x += T(0.001))
{
T y = expression.value();
printf("%19.15f\t%19.15f\n",x,y);
}
}

int main()
{
trig_function<double>();
return 0;
}

Поэтому я использую следующие команды в cmd:

g++ -c -o parser.o -Wa,-mbig-obj -I include parser.cpp
g++ -o parser.exe -s parser.o

exprtk.hpp файл находится во включаемой папке в том же каталоге, что и parser.cpp файл.

Первая проблема заключается в том, что parser.o Файл очень большой (~ 32 Мб), а создание файла .exe занимает так много времени, что я прекращаю компиляцию. Кроме того, без -Wa,-mbig-obj флаг я получаю ошибку. Также я думаю, что нет необходимости в связывании, потому что весь код включен в файл .hpp, и нет файлов .dll или чего-то еще. При сбросе флага ошибка:

C:/Rtools/mingw_64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.3/../../../../x86_64-w64-mingw32/bin/as.exe:
parser.o: too many sections (88691)
C:\..\AppData\Local\Temp\ccE7ythI.s: Assembler messages:
C:\..\AppData\Local\Temp\ccE7ythI.s: Fatal error: can't write parser.o: File too big
C:/Rtools/mingw_64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.3/../../../../x86_64-w64-mingw32/bin/as.exe: parser.o:
too many sections (88691)
C:\..\AppData\Local\Temp\ccE7ythI.s: Fatal error:
can't close parser.o: File too big

Источник предоставлен через GitHub Вот. Та же ошибка, что и выше, возникает, если я запускаю make в cmd в папке, где находится Makefile.

Я что-то пропускаю или я слишком глуп, импортируя exprtk.hpp файл правильно? Какие-либо предложения?

8

Решение

У вас должен быть флаг -mbig-obj, который учитывает большие объектные файлы.

Как объяснил Вот, .Файлы obj по умолчанию имеют 65536 разделов.

Exprtk — одна большая библиотека шаблонов (hpp — 1.4M), поэтому для ее компиляции потребуется много времени и потребуется много разделов в объектном файле.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]