LINUX.ORG.RU

Нет lua.h

 , ,


0

1

Т.к. мой арч опять внезапно поломался. Я решил временно пересесть на что более юзерфрендли(на выходных планирую слаку) и поставил убунту. Но внезапно обнаружилось что юнити де**мо. Но главное проблема это репозитории. Переставил кучу пакетов, но все равно не собирается с ошибкой

фатальная ошибка: lua.h: Нет такого файла или каталога
компиляция прервана.
Код рабочий, варчевсеработало. Всякие liblua-5.*-dev стоят.

Ответ на: комментарий от Boy_from_Jungle

Пробовал. Но в везде говорят что нужна поставить такой то пакет, который я либо ставлю либо у он у меня есть. И ничего не меняется.

nickionn ★☆
() автор топика

прежде чем …, научись пользоваться поиском

Код рабочий, варчевсеработало. Всякие liblua-5.*-dev стоят.

не льсти себе — код явно не рабочий, если не находит файлы в стандартных локациях

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
slocate lua.h

и

-I/найденный/путь
пробовал?

HerrWeigel ★★★★
()
Ответ на: комментарий от beastie
sudo apt-get install  liblua5.1-0-dev liblua5.2-dev liblua50-dev
[sudo] password for nickubuntu: 
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Уже установлена самая новая версия liblua5.1-0-dev.
Уже установлена самая новая версия liblua5.2-dev.
Уже установлена самая новая версия liblua50-dev.
Следующий пакет устанавливался автоматически и больше не требуется:
  linux-headers-3.5.0-17
Для его удаления используйте «apt-get autoremove».
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 9 пакетов не обновлено.
nickionn ★☆
() автор топика
Ответ на: комментарий от beastie
/usr/include/lua50/lua.h
/usr/include/lua5.1/lua.h
/usr/include/lua5.2/lua.h

Ну понятно что с «lua5.2/lua.h' работает. Но все равно сыпятся ошибки которых раньше не было.

nickionn ★☆
() автор топика

Fedora || Debian. Можно и слака, но там только для самообоучения, ибо задолбаешься

//На аве Halley Williams?

Urchin ★★★
()
Ответ на: комментарий от Urchin

Fedora

Уж слишком плохие слухи про нее ходят.

Debian

Тоже вариант. Но мне он не понравился когда я его пытался ставить примерно 1.5 года назад из за невозможности зависти 3г модем(отсутствие нужных пакетов в свеже установленной системе).

nickionn ★☆
() автор топика
Ответ на: комментарий от beastie

а с «#include <lua.h>»

а сам то пробовал? Все мы знаем что надо делать так

extern "C" {
#include	"lua.h"
#include	"lauxlib.h"
#include	"lualib.h"
};
nickionn ★☆
() автор топика
Ответ на: комментарий от beastie

ошибка: нет декларации «lua_open» в этой области видимости

-llua в makefile есть.

nickionn ★☆
() автор топика
Ответ на: комментарий от nickionn

проблемы приплюснутых анси-сишников не того ☺ и ты таки не прав. extern «C» — это для деклараций C функций, а не инклюд. и уж тем более не локальных инклюд.

beastie ★★★★★
()
Ответ на: комментарий от nickionn

хреновая практика. __BEGIN_DECLS и __END_DECLS должны быть в самих *.h, а не сложены на плечи прикладного пограммиста.

ошибка: нет декларации «lua_open» в этой области видимости

Makefile показывай — явно всё ещё что-то с инклюдами не так.

beastie ★★★★★
()
Ответ на: комментарий от beastie
TARGET=rpg_my_dream
SOURCES=$(wildcard ./src/*.cpp && ./draw/*.cpp)
OBJECTS=$(SOURCES:%.cpp=%.o)


all: $(TARGET)

$(OBJECTS): $(SOURCES)

$(TARGET): $(OBJECTS)
	$(CXX) -o $(TARGET) $(OBJECTS)  -lSDL -lSDL_image -llua

clean:
	$(RM) $(OBJECTS) $(TARGET)

.PHONY: all clean

Ошибок в коде, мейкфайле етц нет. Т.к. раньше все работало.

nickionn ★☆
() автор топика
Ответ на: комментарий от nickionn
--- Makefile.orig       2012-10-22 21:57:56.000000000 +0200
+++ Makefile    2012-10-22 21:59:27.000000000 +0200
@@ -1,14 +1,15 @@
 TARGET=rpg_my_dream
 SOURCES=$(wildcard ./src/*.cpp && ./draw/*.cpp)
 OBJECTS=$(SOURCES:%.cpp=%.o)
-
+CPPFLAGS+=`lua-config --inludes --libs`
+CPPFLAGS+=`sdl-config --cflags --libs`
 
 all: $(TARGET)
 
 $(OBJECTS): $(SOURCES)
 
 $(TARGET): $(OBJECTS)
-       $(CXX) -o $(TARGET) $(OBJECTS)  -lSDL -lSDL_image -llua
+       $(CXX) -o $(TARGET) $(OBJECTS) $(CPPFLAGS) -lSDL -lSDL_image -llua
 
 clean:
        $(RM) $(OBJECTS) $(TARGET)
beastie ★★★★★
()
Ответ на: комментарий от beastie

и да, если ты уж понаставил три разные версии lua — то остановись уж на какой-нибудь одной, что бы не покусались.

beastie ★★★★★
()
Ответ на: комментарий от beastie

С ним нормально инклюдится, только

нет декларации «luaL_openlibs» в этой области видимости
ошибка: нет декларации «luaL_dofile» в этой области видимости
нет декларации «lua_getfield» в этой области видимости

наверно что то с -llua

nickionn ★☆
() автор топика
Ответ на: комментарий от nickionn

Все мы знаем что надо делать так

А также все мы знаем, что Lua не грех таскать с собой

annulen ★★★★★
()
Ответ на: комментарий от beastie

кстати, пардон, моя недоработка: в диффе выше достаточно

$(CXX) -o $(TARGET) $(OBJECTS) $(CPPFLAGS)
т.к. все -l* уже помещенны в $(CPPFLAGS) *-config скриптами

beastie ★★★★★
()

Лучше добавляй в проект исходники луа. Между минорными версиями API несовместимо - после очередного обновления может всё упасть. Там всего несколько файлов и собирается очень быстро всё.

Esh ★★★★
()
Ответ на: комментарий от nickionn

Ошибок в коде, мейкфайле етц нет. Т.к. раньше все работало.

Да, все же зеркало не виновато. Это рожа кривая.

andreyu ★★★★★
()
Ответ на: комментарий от i-rinat

да, можно конечно и так и пожалуюй даже лучше. шансов, что в пакете не будет *-config, но будет *.pc гораздо больше. (в моём дебиане lua-config есть, но это ни о чём не говорит)

@ТС: CPPFLAGS+=`pkg-config --cflags --libs lua sdl`

beastie ★★★★★
()

Думал что все работает, а на самом деле нет. Закинул lua.h, luaconf етц. к сорцам. Но начало выдавать

/usr/bin/ld: cannot find -llua
Методом тыка нашел что liblua.so ставится только с пакетом liblua50, и то надо симлинк делать. Нашел нужную «soшку» в /usr/lib/x86_64-linux-gnu, сделал симлинк.
parser.cpp:(.text+0x1ad): undefined reference to `luaL_loadfile'
parser.cpp:(.text+0x1cf): undefined reference to `lua_pcall'
parser.cpp:(.text+0x229): undefined reference to `lua_pcall'
parser.cpp:(.text+0x256): undefined reference to `lua_tonumber'
parser.cpp:(.text+0x3da): undefined reference to `lua_tonumber'
parser.cpp:(.text+0x413): undefined reference to `lua_tonumber'
parser.cpp:(.text+0x56e): undefined reference to `lua_tonumber'
parser.cpp:(.text+0x62b): undefined reference to `lua_tonumber'
Скачал liblualib50, сделал симлинк.
неопределённая ссылка на символ «lua_pcall»
/usr/bin/ld: замечание: «lua_pcall» определён в DSO /usr/lib/liblua50.so.5.0, попробуйте добавить его в командную строку компоновщика
/usr/lib/liblua50.so.5.0: could not read symbols: Неверная операция
collect2: ошибка: выполнение ld завершилось с кодом возврата 1

nickionn ★☆
() автор топика
Ответ на: комментарий от nickionn

горе ты луковое. я тебя полюбил — я тебя научю. итак:

твой Makefile:

TARGET=         rpg_my_dream
SOURCES=        $(wildcard ./src/*.cpp && ./draw/*.cpp)
OBJECTS=        $(SOURCES:%.cpp=%.o)

CPPFLAGS+=      $(shell pkg-config --cflags sdl lua)
LDFLAGS+=       $(shell pkg-config --libs sdl lua)

$(TARGET): $(OBJECTS)

clean:
        $(RM) $(OBJECTS) $(TARGET)

.PHONY: clean

твои инклюды:

extern "C" {
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
};

сносишь нафиг всю локальную копию liblua в твох сырцах.

сносишь нафиг все лишние liblua*. оставляешь только один(!) — 5.1 или 5.2 (в 5.0 нет того функционала, которого тебе хочется):

# apt-get remove liblua5*
# apt-get install liblua5.1-0-dev

компилируешь и радуешься

beastie ★★★★★
()
Ответ на: комментарий от beastie

[code]

TARGET= rpg_my_dream SOURCES= $(wildcard ./src/*.cpp && ./draw/*.cpp) OBJECTS= $(SOURCES:%.cpp=%.o)

CPPFLAGS+= $(shell pkg-config --cflags sdl lua) LDFLAGS+= $(shell pkg-config --libs sdl lua)

$(TARGET): $(OBJECTS)

clean: $(RM) $(OBJECTS) $(TARGET)

.PHONY: clean

Хоть и собирается, но где бинарник?

Еще он жаловался на отсутвие lua.pc, взял из сорцев.

сносишь нафиг все лишние liblua*. оставляешь только один(!) — 5.1 или 5.2 (в 5.0 нет того функционала, которого тебе хочется):

Давно уже это сделал, осталось 5.1.

nickionn ★☆
() автор топика
Ответ на: комментарий от nickionn

так собирается или «где бинарник»? лог в студию, пожалуста.

Еще он жаловался на отсутвие lua.pc, взял из сорцев.

хм… всё на месте, проверял специально на убунте:

dpkg -L liblua5.1-0-dev | grep pc$
/usr/lib/pkgconfig/lua5.1.pc

apropos, посмотреть, что о ком занет pkg-config можно так:

pkg-config --list-all
но это ты мог бы и сам из мана узнать.

вот тебе окончательный вариант, теперь уже точно всё должно завестись:

TARGET=         rpg_my_dream
SOURCES=        $(wildcard ./src/*.cpp && ./draw/*.cpp)
OBJECTS=        $(SOURCES:%.cpp=%.o)

CPPFLAGS+=      $(shell pkg-config --cflags sdl lua5.1)
LDFLAGS+=       $(shell pkg-config --libs sdl lua5.1)

$(TARGET): $(OBJECTS)

clean:
        $(RM) $(OBJECTS) $(TARGET)

.PHONY: clean
beastie ★★★★★
()
Ответ на: комментарий от beastie
dpkg -L liblua5.1-0-dev | grep pc$
/usr/lib/pkgconfig/lua5.1.pc

Оказывается тоже есть, но не там где ищет pkg-config.

так собирается или «где бинарник»? лог в студию, пожалуста.

g++  -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -I/usr/include/lua5.1    -c -o src/character.o src/character.cpp
g++  -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -I/usr/include/lua5.1    -c -o src/collision.o src/collision.cpp
g++  -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -I/usr/include/lua5.1    -c -o src/event.o src/event.cpp
g++  -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -I/usr/include/lua5.1    -c -o src/key.o src/key.cpp
g++  -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -I/usr/include/lua5.1    -c -o src/log.o src/log.cpp
g++  -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -I/usr/include/lua5.1    -c -o src/main.o src/main.cpp
g++  -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -I/usr/include/lua5.1    -c -o src/map.o src/map.cpp
g++  -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -I/usr/include/lua5.1    -c -o src/parser.o src/parser.cpp
g++  -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -I/usr/include/lua5.1    -c -o src/physics.o src/physics.cpp
g++  -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -I/usr/include/lua5.1    -c -o src/script.o src/script.cpp
g++  -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -I/usr/include/lua5.1    -c -o draw/draw.o draw/draw.cpp
g++  -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -I/usr/include/lua5.1    -c -o draw/gui.o draw/gui.cpp
draw/gui.cpp: В функции-члене «int gui::game(SDL_Surface*)»:
draw/gui.cpp:27:31: предупреждение: deprecated conversion from string constant to «char*» [-Wwrite-strings]
nickionn ★☆
() автор топика
Ответ на: комментарий от nickionn

но не там где ищет pkg-config

не, ищет он правильно, ему только другое имя (с версией) указать надо — не зря я тебе Makefile ещё раз привёл.

draw/gui.cpp:27:31: предупреждение: deprecated conversion from string constant to «char*» [-Wwrite-strings]

а вот тут уже ошибки в твоём коде копать надо. к проблемам сборки это уже не относится.

beastie ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.