Я использую Rcpp для интеграции кода C ++ в R-пакет. После компиляции я вижу, что файлы * .o огромны (~ 2 МБ), а исходные файлы * .cpp и * .h — всего ~ 20 КБ. Откуда эта разница? Ранее я реализовывал аналогичную функциональность без Rcpp и файлов * .o, которые были не такими большими. С этим размером файла мой пакет превышает разрешенные 4Mb от check ().
Как указано в ответе на этот вопрос, Есть несколько причин, почему скомпилированный объект C ++ может быть таким большим. В случае Rcpp, вероятная причина как Дирк Эддельбюттель пишет в этом посте общие библиотеки.
Я предлагаю следовать за комментарием @coatless и создать файл Makevars внутри пакета package/src
(вы можете скопировать те из rcopulib пакет), чтобы указать параметры компилятора для общих библиотек (те, .h
это может быть вызвано несколько раз).
Или вы можете скопировать следующий код для ваших Makevars:
strippedLib: $(SHLIB)
if test -e "/usr/bin/strip" & test -e "/bin/uname" & [[ `uname` == "Linux" ]] ; then /usr/bin/strip --strip-debug $(SHLIB); fi
.phony: strippedLib
как ответ Дирка имеет проблемы с OSX как уже упоминалось в этой дискуссии.
В качестве дополнительного примечания:
Будьте осторожны с таблицами и пробелами в Макеварах (они имею в виду что-то). Конкретно, во второй строке 2 вкладки (не пробелы).
Других решений пока нет …