Jump to content

    
jenya7

Портировать Pawn на малинку

Recommended Posts

1 hour ago, jenya7 said:

а как теперь *.so  в проект включить в Qt?

Про QT не знаю.

В CMake

target_link_libraries( project_name /full_path_to_so_file )
  

 В gcc -l/full_path_to_so  (маленькая L)

Share this post


Link to post
Share on other sites
41 minutes ago, VladimirG said:

Про QT не знаю.

В CMake


target_link_libraries( project_name /full_path_to_so_file )
  

 В gcc -l/full_path_to_so  (маленькая L)

я подключил

INCLUDEPATH += /home/pi/pawn/build

но проект не видит ни  хедер файлы ни объекты.

void PawnSetup()

{

    AMX amx;

}

ругается на AMX .

Share this post


Link to post
Share on other sites
25 minutes ago, VladimirG said:

amx.h находится в папке pawn/amx

Нужно её добавлять в инклюд

и включать заголовочный файл #include <amx.h>

 

ну так да. видит.

INCLUDEPATH += /home/pi/pawn/amx

а зачем мне тогда so файлы?

обычно я подключаю в Qt так

LIBS+= -l???

только не понимаю что в данном случае  library для меня.

Edited by jenya7

Share this post


Link to post
Share on other sites

 

10 minutes ago, jenya7 said:

ну так да. видит. а зачем мне тогда so файлы?

Вот это уже очень странный вопрос =\

 

Заголовочный файл, он как оглавление в книге, вы же не сможете прочитать книгу имея только оглавление...

Edited by VladimirG

Share this post


Link to post
Share on other sites
On 1/17/2022 at 11:29 AM, jenya7 said:

с Линуксом сложней, в папке amx просто огроменная куча файлов.

Врнулись к началу.

10 minutes ago, jenya7 said:

берет только хедеры и не билдит сорсы?

Да, сам компилятор возьмет только хедеры, и то в том случае если включить папку с хедерами в пути поиска. INCLUDEPATH

 

Share this post


Link to post
Share on other sites
41 minutes ago, VladimirG said:

Врнулись к началу.

Да, сам компилятор возьмет только хедеры, и то в том случае если включить папку с хедерами в пути поиска. INCLUDEPATH

 

я понял. тут вот какя проблема. при инициализации

int PawnSetup(char *file)
{
    extern AMX_NATIVE_INFO console_Natives[];
    extern AMX_NATIVE_INFO core_Natives[];
    AMX amx;
    cell ret = 0;
    int err;

    err = aux_LoadProgram(&amx, file, NULL);
    if (err != AMX_ERR_NONE)
    ErrorExit(&amx, err);
    amx_Register(&amx, console_Natives, -1);
    err = amx_Register(&amx, core_Natives, -1);
    if (err)
        ErrorExit(&amx, err);
    err = amx_Exec(&amx, &ret, AMX_EXEC_MAIN);
    if (err)
        ErrorExit(&amx, err);
  
    printf("%s returns %ld\n", argv[1], (long)ret);
  
    aux_FreeProgram(&amx);
  
    return 0;
}

на aux_LoadProgram получаю undefined reference. aux_LoadProgram  не включена в библиотеку.

добавляю прямо в проект amxaux.c и amxaux.h получаю

error: No rule to make target 'Pawn/amx.c', needed by 'amx.o'.

error: sclinux.h: No such file or directory  #include <sclinux.h>

можно как то сбидлить amxaux.c и amxaux.h? включть в библиотеку?

 

Edited by jenya7

Share this post


Link to post
Share on other sites

Думаю есть 2 пути.

1 создать самому so библиотеку. В папке pawn/amx

gcc amx.c amxcore.c amxcons.c amxaux.c ../linux/getch.c -ldl -I../linux -c -fPIC
gcc -shared -o aux.so  *.o -ldl

2 руками указать в проекте пути к файлам amx.c, amxcore.c, amxcons.c ,amxaux.c

включить в INCLUDEPATH папку pawn/linux

 

В pawn_implementation_guide стр 78 есть описание сборки 

И еще в ней же на странице 7 упоминание о переменной окружения AMXLIB для указания метса скомпиленных библиотек.

Share this post


Link to post
Share on other sites
1 hour ago, VladimirG said:

Думаю есть 2 пути.

1 создать самому so библиотеку. В папке pawn/amx


gcc amx.c amxcore.c amxcons.c amxaux.c ../linux/getch.c -ldl -I../linux -c -fPIC
gcc -shared -o aux.so  *.o -ldl

2 руками указать в проекте пути к файлам amx.c, amxcore.c, amxcons.c ,amxaux.c

включить в INCLUDEPATH папку pawn/linux

 

В pawn_implementation_guide стр 78 есть описание сборки 

И еще в ней же на странице 7 упоминание о переменной окружения AMXLIB для указания метса скомпиленных библиотек.

я включил

INCLUDEPATH += /home/pi/pawn/amx

INCLUDEPATH += /home/pi/pawn/build

INCLUDEPATH += /home/pi/pawn/linux

но получаю

No rule to make target 'Pawn/amx.c' needed by amx.o.

Share this post


Link to post
Share on other sites
43 minutes ago, VladimirG said:


 

 SOURCES += \ 
   amx.c amxcore.c amxcons.c amxaux.c ../linux/getch.c

С полными путями относительно проекта QT

тогда так

 SOURCES += /home/pi/pawn/amx/amx.c

 SOURCES += /home/pi/pawn/amx/amxcore.c

 SOURCES += /home/pi/pawn/amx/amxcons.c

 SOURCES += /home/pi/pawn/amx/amxaux.c

SOURCES += /home/pi/pawn/linux/getch.c

потому что все сорсы там

только та же ошибка генерируется

 

блииин... я извиняюсь. pro файл не обновляется на Clean и там осталась старая папка Pawn в которой я пытался компилировать сорсы. я её стер из pro и теперь получаю

in function PawnSetup

undefined reference to amx_Exec

хотя #include <amx.h>  проект видит и Goto Reference отсылает меня на эту функцию в заголовочном файле.

 

а если включить сорсы с  SOURCES +=  то вываливаются те же ошибки которые были когда я пытался компилировать сорсы в проекте.

 

 

Edited by jenya7

Share this post


Link to post
Share on other sites
On 1/28/2022 at 9:25 AM, VladimirG said:

Тогда советую попробовать первый путь, собрать библиотеку и её подключать.

 

я вот что не понимаю.

в build сгенерировались все so файлы. но amx.c и amx.h не включены в мэйк файл и amx.so не сгенерировался. не мудрено что он ругается

undefined reference to amx_Exec

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.