2012-02-06 3 views
1

Я пытаюсь использовать R для создания 2 файлов первый фактически генерирует довольно хорошо, но второй один говорит мне следующее:R бросали ошибки при попытке компиляции

conteo_correlaciones.c:3:15: error: R.h: No such file or directory conteo_correlaciones.c:4:24: error: Rinternals.h: No such file or directory conteo_correlaciones.c:31: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘countcorrelations’

как Rh и Rinternals.h были копируется из каталога R и они находятся в той же директории, что все остальные файлы, но я не могу получить за этой ошибкой, эти файлы называют по включаемый, как это:

#include <R.h> 
#include <Rinternals.h> 

и что я в терминале:

R CMD SHLIB conteo_correlaciones.c 

Который прекрасно работает и создает мне правильный файл и:

gcc -dynamiclib conteo_correlaciones.c -o conteo_correlaciones.so 

Который бросает мне вышеупомянутую ошибку. Любая идея, что может быть?

ответ

0

Вы должны изменить

#include <R.h> 
#include <Rinternals.h> 

в

#include "R.h" 
#include "Rinternals.h" 

если файлы заголовков находятся в той же директории, как ваши файлы кода. Или вы можете добавить правильный путь include к gcc-командной строке (например, -I/usr/share/R/include).

8

R CMD SHLIB добавляет все соответствующие флаги для компиляции кода. Вы не можете (надежно) скомпилировать свой код «вручную». R CMD SHLIB уже создает все необходимые файлы, поэтому вам не нужно запускать gcc.

Например, это то, что R CMD SHLIB работает:

$ R CMD SHLIB foo.c 
gcc -arch x86_64 -std=gnu99 -I/Library/Frameworks/R.framework/Resources/include 
    -I/Library/Frameworks/R.framework/Resources/include/x86_64 
    -I/usr/local/include -fPIC -g -O2 -c foo.c -o foo.o 
gcc -arch x86_64 -std=gnu99 -dynamiclib -Wl,-headerpad_max_install_names 
    -undefined dynamic_lookup -single_module -multiply_defined suppress 
    -L/usr/local/lib -o foo.so foo.o -F/Library/Frameworks/R.framework/.. 
    -framework R -Wl,-framework -Wl,CoreFoundation 

Как вы можете видеть, что есть длинный список флагов, которые необходимы для создания правильного двоичного файла. Первая строка - это компиляция, вторая - связь. Как вы можете видеть, это даже не близко к тому, что вы пытались сделать «вручную».

Что касается точной ошибки - это всего лишь один из многих, что вы получили бы - в приведенном выше случае вам нужно включить путь включения R с помощью -I. Есть и другие, поэтому вы не хотите туда ехать, просто придерживайтесь R CMD SHLIB.

0

Сначала найдите место хранения R.h (оно может быть в/usr/include или/usr/local/include или где угодно, если R установлено из источников). В моем случае это в/главная/пользователя/R/включать /:

Затем экспортируйте пути:

export CPATH=/home/user/R/include/ 
export C_INCLUDE_PATH=/home/user/R/include/ 
export CPLUS_INCLUDE_PATH=/home/user/R/include/ 
export GCC_INCLUDE_DIR=/home/user/R/include/ 

Сборник должен затем работать нормально.

Смежные вопросы