Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Проблема C++ и lua  (Прочитано 1870 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн iamkisly

  • Автор темы
  • Любитель
  • *
  • Сообщений: 93
  • это я в 10 лет назад
    • Просмотр профиля
    • Электроника как хобби
Проблема C++ и lua
« : 04 Августа 2013, 11:21:00 »
kUbuntu 13.04
Linux Victoria 3.8.0-26-generic #38-Ubuntu SMP Mon Jun 17 21:43:33 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

есть код простейшего примера
#include <iostream>

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

using namespace std;

int load_script(void);

int main()
{
    cout << "Hello world!" << endl;

    load_script();

    return 0;
}

int load_script(void)
{
    lua_State *L=lua_open();
    luaL_openlibs(L);
    luaL_dofile(L,"lua_01.lua");
    lua_close(L);
    return 0;
}

$ cat lua_01.lua
#!/usr/bin/lua
print("Приветствую тебя о дивный, чудный мир!")
io.write("Версия: ", _VERSION,"\n")
print("Два плюс три равно: ",2+3)

из командной строки собирается : g++ main.cpp -I/usr/include/lua5.1/ -llua5.1 -o lua_01

из ide co0de::blocks - нет.
путь к хидерам прописан в buildd options > search directories > /usr/include/lua5.1/
в compiler settings > other options > -llua5.1
ругань
(Нажмите, чтобы показать/скрыть)

что я делаю не так ?

http://f4.s.qip.ru/5G6TvVTr.png

Руководство по добавлению изображений на форум

--andrew_bye
« Последнее редактирование: 28 Октября 2013, 22:04:08 от kisly »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Проблема C++ и lua
« Ответ #1 : 10 Августа 2013, 21:46:27 »
ты всё делаешь не так.
есть стадия компиляции и есть стадия линковки. ты их так правильно разделил, что просто слов нет.
прочитай ман к gcc и усвой какие ключи куда надо писать.
еще дам дружеский совет: прочитай про pkg-config

попозже загляну, проверю справился ли.

тема кстати не правильная. ни у С++ ни у lua ни у них вместе взятых проблем нет.

« Последнее редактирование: 10 Августа 2013, 21:49:21 от Yurror »

Оффлайн iamkisly

  • Автор темы
  • Любитель
  • *
  • Сообщений: 93
  • это я в 10 лет назад
    • Просмотр профиля
    • Электроника как хобби
Re: Проблема C++ и lua
« Ответ #2 : 16 Августа 2013, 08:40:44 »
g++ -Wall -fexceptions  -g -llua5.1    -I/usr/include/lua5.1  -c /media/big_foot/workspace/test_project/test_1/main.cpp -o obj/Debug/main.o
g++  -o bin/Debug/test_1 obj/Debug/main.o   

я добавил только ключи -llua5.1  и  -I/usr/include/lua5.1, остальное - дело Code::Blocks

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7213
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Проблема C++ и lua
« Ответ #3 : 16 Августа 2013, 14:06:59 »
kisly, получилось или нет? Начинай с текстового редактора, консоли и компилятора, чтоб фигню потом всякую не писать. IDE тебе рано ИМХО.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Проблема C++ и lua
« Ответ #4 : 19 Августа 2013, 10:46:36 »
kisly,
Добавил не туда, начинай с консоли.

Оффлайн iamkisly

  • Автор темы
  • Любитель
  • *
  • Сообщений: 93
  • это я в 10 лет назад
    • Просмотр профиля
    • Электроника как хобби
Re: Проблема C++ и lua
« Ответ #5 : 19 Августа 2013, 14:53:55 »
я вернулся :) выписали из инфекционки :(  (о эти жуткие холодные стены)

попробовал так :
$ g++ -I/usr/include/lua5.1  -c /media/big_foot/workspace/test_project/test_1/main.cpp -o obj/Debug/main.o
$ g++ -llua5.1 -o bin/Debug/test_1 obj/Debug/main.o


линковка не удалась..

потом как-то интуитивно попробовал поменять местами ключи :
me@Victoria:/media/big_foot/workspace/test_project/test_1$ g++ -o obj/Debug/main.o -I/usr/include/lua5.1  -c /media/big_foot/workspace/test_project/test_1/main.cpp
me@Victoria:/media/big_foot/workspace/test_project/test_1$ g++ -o bin/Debug/test_1 obj/Debug/main.o -llua5.1


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

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Проблема C++ и lua
« Ответ #6 : 19 Августа 2013, 16:04:30 »
для gcc меняется.

Оффлайн iamkisly

  • Автор темы
  • Любитель
  • *
  • Сообщений: 93
  • это я в 10 лет назад
    • Просмотр профиля
    • Электроника как хобби
Re: Проблема C++ и lua
« Ответ #7 : 19 Августа 2013, 17:14:47 »
печаль беда

Оффлайн iamkisly

  • Автор темы
  • Любитель
  • *
  • Сообщений: 93
  • это я в 10 лет назад
    • Просмотр профиля
    • Электроника как хобби
Re: Проблема C++ и lua
« Ответ #8 : 28 Октября 2013, 01:29:36 »
так я и не вкурил в эту тему.. пробую скомпилировать hello world для thread.
в одну строку всё получается
g++ -o thread -std=c++11 -pthread -Wl,--no-as-needed main.cppесли разделять на стадии, то ругаетсо
g++ -o obj/Debug/main.o -std=c++11 -Wl,--as-needed -c /home/me/workspace/test_thread/main.cpp
g++  -o bin/Debug/test_thread obj/Debug/main.o    -lpthread
последовательность вродебы правильная, а толку нет. Подскажите плз.

Оффлайн kupamaan

  • Любитель
  • *
  • Сообщений: 52
    • Просмотр профиля
Re: Проблема C++ и lua
« Ответ #9 : 28 Октября 2013, 07:48:53 »
если разделяете то делайте по порядку, компиляция  -> линковка.
Код: (c++) [Выделить]
g++ -Wl --as-needed -c -std=c++11 /home/me/workspace/test_thread/main.cpp   //компиляция
g++  -o bin/Debug/test_thread obj/Debug/main.o    -lpthread   //линковка
написано же
Цитировать
для gcc меняется.
« Последнее редактирование: 28 Октября 2013, 14:08:58 от kupamaan »

Оффлайн iamkisly

  • Автор темы
  • Любитель
  • *
  • Сообщений: 93
  • это я в 10 лет назад
    • Просмотр профиля
    • Электроника как хобби
Re: Проблема C++ и lua
« Ответ #10 : 28 Октября 2013, 18:08:03 »
me@Victoria:~/workspace/test_thread$ ./bin/Debug/test_thread
terminate called after throwing an instance of 'std::system_error'
  what():  Enable multithreading to use std::thread: Operation not permitted
Аварийный останов (сделан дамп памяти)
-Wl передает опции линкеру, но блин где его писать ?


Пользователь решил продолжить мысль 28 Октября 2013, 21:36:14:
теоретически должно быть так :

Цитата: internet
для ряда опций gcc важен порядок их следования в командной строке. Так линковщик ищет код, соответствующий указанным в таблице символов файла именам в библиотеках, перечисленных в командной строке после имени этого файла. Содержимое библиотек перечисленных до имени файла линковщик игнорирует.
Цитировать
Если у пользователя возникает потребность самому вмешаться в процесс линковки он может воспользоваться специальной опцией gcc -Wl,-option,value1,value2.... Что означает передать линковщику (-Wl) опцию -option с аргументами value1, value2 и так далее.

на практике фейл
(вот с этим)
g++ -std=c++11 -c  /home/me/workspace/test_thread/main.cpp
g++ -o thread main.o -Wl,--as-needed -lpthread

скажите у кого с каким порядком заработало 

Пользователь решил продолжить мысль 28 Октября 2013, 22:03:42:
Алилуйа !!!! g++ -Wl,--no-as-needed -o thread main.o -pthread
« Последнее редактирование: 28 Октября 2013, 22:03:42 от kisly »

 

Страница сгенерирована за 0.018 секунд. Запросов: 21.