Это, как представляется, обычная проблема, но я не могу обернуть эту проблему.Включить gsl_type.h. Файл не найден
У меня есть код .c, который я компилирую с помощью make-файла. Цель состоит в том, чтобы создать общий объект (.so), так что я могу запустить код C от R.
Вот мой Makefile:
obs = R_wrapper.o G.o develop.o utilities.o
CFLAGS = -arch x86_64 -std=gnu99 -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/include/x86_64 -DNDEBUG -I/usr/local/include -fPIC -g -O3 -c
LFLAGS = -arch x86_64 -std=gnu99 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/lib -O3 -lgsl -lm -lgslcblas
R_wrapper : $(obs)
$gcc $(LFLAGS) $(obs) -o R_wrapper.so
R_wrapper.o : R_wrapper.c constants.h develop.h G.h
$gcc $(CFLAGS) R_wrapper.c
G.o : G.c G.h constants.h utilities.h develop.h
$gcc $(CFLAGS) G.c develop.c
develop.o : develop.c develop.h G.h constants.h
$gcc $(CFLAGS) develop.c
utilities.o : utilities.c develop.h
$gcc $(CFLAGS) utilities.c
Это отлично на компьютере работает в моей лаборатории, но это не работает на моем персональном компьютере. В чем причина этой проблемы - эти две строки в начале моего R_wrapper.c.
#include </opt/local/include/gsl/gsl_randist.h>
#include </opt/local/include/gsl/gsl_rng.h>
Я попытался переместить эти файлы вокруг и дают разные пути, поместить файлы в gal_type.h файлы в том же каталоге, что и мой файл R_wrapper, я попытался переименовать свои каталоги таким образом, что путь более обычное, но ОС не дало мне права переименовать opt
в usr
(что, вероятно, имеет смысл). Я не создал make-файл и не полностью его получил. Я бы предположил, что мне нужно будет изменить путь после аргумента -I
где-нибудь в CFLAGS
ИЛИ LFLAGS
.
EDIT 1
Я изменил R_wrapper.c
на моем лабораторном компьютере, чтобы избавиться от всего пути в #include <...>
. Компиляция завершилась неудачно, как прогнозировалось @Beta. Затем я изменил свой файл makefile, чтобы добавить -I/opt/local/include/gsl
в CFLAGS
. Я не знаю, что вы подразумеваете под Verify that the makefile still works.
Я попытался скомпилировать с моим измененным makefile на моем лабораторном компьютере, и это не удалось. Затем я повторно отредактировал мой файл makefile, изменив -I/opt/local/include/gsl
на -I/usr/local/include/gsl
, потому что на моем лабораторном компьютере папка gsl
находится на /usr/local/include/gsl
. -I/opt/local/include/gsl
- это местоположение папки gsl
на моем компьютере. Поэтому я застрял здесь в вашей процедуре.
Edit 2
я переместил папку gsl
вокруг моего компьютера пытается включать в себя от различных путей. И некоторые интересные вещи случаются. Например, когда я положил папку gsl
в Users/remi/Documents/Biologie/programing/C/
и записи (в CFLAGS
)
-I/Users/remi/Documents/Biologie/programing/C/
Я получаю эту ошибку:
R_wrapper.c:43:10: fatal error: 'gsl_randist.h' file not found
#include <gsl_randist.h> // goal.
Когда я пишу (в CFLAGS
)
Users/remi/Documents/Biologie/programing/C/gsl
I получите это сообщение об ошибке:
"In file included from R_wrapper.c:43: /Users/remi/Documents/Biologie/programing/C/gsl/gsl_randist.h:22:10: fatal error:
'gsl/gsl_rng.h' file not found
#include <gsl/gsl_rng.h>"
Судя по сообщению о 'GSL/gsl_rng.h 'не найден в Edit 2, вы должны писать' #include '(с префиксом пути' gsl/'до имени заголовка) в исходном коде. Это обычное соглашение. Затем вы указываете в параметре '-I' имя каталога, содержащего подкаталог' gsl', который содержит заголовки 'gsl _ *. H'. Вы должны прочитать документацию, и если она говорит '#include ' или '#include" gsl/gsl_randist.h ", то это то, что вы должны написать в своем коде, потому что (как вы обнаружил трудный путь), если вы этого не сделаете, это не сработает. –
@JonathanLeffler Oh! Это решило мою проблему! Уф. Я много боролся с этой проблемой ... это было просто (как обычно). Большое спасибо! Можете ли вы дать ответ из своего комментария, чтобы я мог его проверить? –
Включите эту библиотеку, используя: #include –
Eftekhari