Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Как указать путь к perl.h в Makefile?


Автор: Dims 1.6.2009, 19:42
При компилляции одной программы возникают ошибки ненайденности файлов, таких как:

Код

PerlClass.cpp:49:20: error: EXTERN.h: No such file or directory
PerlClass.cpp:64:18: error: perl.h: No such file or directory
PerlClass.cpp:65:18: error: XSUB.h: No such file or directory


Эти файлы у меня хранятся в директории

Код

/usr/lib64/perl5/5.10.0/x86_64-linux-thread-multi/CORE


где, видимо, лежат исходники Перла. То есть, путь к этим инклюдам где-то теряется в Makefile. Внутри Makefile нашёл такое место

Код

### Use RPATH for storing the path to the perl lib

all: $(MIC)

ifndef STATIC
LDFLAGS += -Wl,-rpath,$(PERL_CORE)
else
LDFLAGS += -static
endif



Что это означает? Не означает ли это, что где-то здесь и надо прописать этот путь? Где? Что означает строка

Код

LDFLAGS += -Wl,-rpath,$(PERL_CORE)


?

Автор: vinick 1.6.2009, 20:47
Эта строка относится к параметрам линкера. К инклюдам она отношения не имеет. Надо смотреть что-то типа CXXFLAGS

Откуда берется Makefile? он уже готовый или генерируется скриптом типа configure. Если последнее, то надо посмотреть в опциях скрипта. 

Автор: Dims 1.6.2009, 21:15
В общем, я ошибся. Директория с перлом искалась строкой

PERL_CORE  = $(strip $(shell $(PERL) -MExtUtils::Embed -e perl_inc | sed 's/[ \t]*-I//'))

а файла Embed.pm не было. Проблема решилась установкой пакета perl-ExtUtils-Embed.

А всё-таки, что делает строка, которая меня заинтересовала изначально?

Автор: xvr 2.6.2009, 11:15
Цитата(Dims @ 1.6.2009,  21:15)
А всё-таки, что делает строка, которая меня заинтересовала изначально?

Добавляет к опциям на этапе линковки -Wl,-rpath,<путь на PERL>, что обозначает: передать линкеру (-Wl) опцию -rpath <путь на PERL>, что в свою очередь обозначает - добавить в пути поиска .so библиотек путь <путь на PERL> (этот путь будет прописан прямо в исполняемый файл). Видимо оттуда должны браться динамические библиотеки PERL'а


Автор: Dims 3.6.2009, 13:48
Чё-то не врубаюсь.

А вот такая строка что делает:

LDFLAGS += -static

Такое впечатление, что она добавляет к переменной LDFLAGS какую-то строку. Но какую? Прямо строку "-static" что ли?

Автор: xvr 3.6.2009, 13:52
Цитата(Dims @ 3.6.2009,  13:48)
А вот такая строка что делает:

LDFLAGS += -static

Такое впечатление, что она добавляет к переменной LDFLAGS какую-то строку. Но какую? Прямо строку "-static" что ли?

Да. Это ключ, заставляющий линкер линковать все библиотеки статически (по мере возможности  smile )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)