LINUX.ORG.RU

создание динамической библиотеки Qt Creator Linux

 , , ,


0

1

Всем привет, возник такой вопрос, у меня есть программа Scada Trace Mode 7, для нее мне необходимо написать динамическую библиотеку, так вот, при написание динамической библиотеки для Windows версии программы в Microsoft Visual Studio, все работает как надо без нареканий. Но как только перехожу в Linux начинаются танцы с бубном, пытаюсь в Qt creatore создать динамическую библиотеку, она создается, но не работает. Вы мой последний шанс, уже на всех форумах спросил. может есть полный аналог Microsoft Visual Studio для линукс, чтобы автоматически устанавливал зависимости и тд, или может вы знаете как создавать динам. библиотеки правильно, в Linux(red os)

Тема выглядит как бред. Можешь как-то более адекватно объяснить, что конкретно не так? Логи ошибок не лишним бы. Что за библиотека, динамическая библиотека, которая линкуется к бинарнику, или плагин? Или вообще статическая библиотека? Какая система сборки?

Werenter ★★☆
()

Насколько я в курсе в студии для управления зависимостями используется vcpkg. Его можно использовать и в линуксе, управление зависимостями будет тем же.

Но если у тебя библиотека собирается, то проблема вряд ли в зависимостях. Ванга умерла, а без неё тебе сложно чем-то помочь.

Ivan_qrt ★★★★★
()

но не работает

Если уж этот форум последний шанс и надо что то перенести на Linux, тут действительно помогут, только напиши что значит «не работает», что не работает, как проверяешь, какие ошибки видишь

I-Love-Microsoft ★★★★★
()

может есть полный аналог Microsoft Visual Studio для линукс, чтобы автоматически устанавливал зависимости и тд, или может вы знаете как создавать динам. библиотеки

Уже такие люди пишут динам. библиотеки под Linux? Мир АйТи свернул не туда...

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

Как-как, есть Scada система Trace Mode 7, пишу для нее внешний драйвер, шаблон кода драйвера есть, его нужно скомпилировать в динамическую библиотеку и запихнуть в корневую папку, при вызове канала через МРВ, у меня должно выводиться значение на графический элемент, но вместо него МРВ(монитор реального времени) закрывается, и да, в этой Scada все плохо, что он закрывается без ошибки какой-либо, просто выключается, такое происходит и на винде если там скомпилить через Qt, а не через MVS, и я вот не знаю в Qt проблема, либо в отсутствии какой-либо информации о том как это делается

Nikita28
() автор топика
Ответ на: комментарий от Xintrea

Ну во-первых это для учебного проекта в вузе, и не для самого линукса, а для Скада системы, во-вторых выбора у меня нет, сказали делать, но жаль не сказали как

Nikita28
() автор топика
Ответ на: комментарий от rumgot

Как-как, есть Scada система Trace Mode 7, пишу для нее внешний драйвер, шаблон кода драйвера есть, его нужно скомпилировать в динамическую библиотеку и запихнуть в корневую папку, при вызове канала через МРВ, у меня должно выводиться значение на графический элемент, но вместо него МРВ(монитор реального времени) закрывается, и да, в этой Scada все плохо, что он закрывается без ошибки какой-либо, просто выключается, такое происходит и на винде если там скомпилить через Qt, а не через MVS, и я вот не знаю в Qt проблема, либо в отсутствии какой-либо информации о том как это делается cpp #include «rwh_64.h» #include

unsigned do_val[256]; float ao_val[256]; unsigned opt_val[256];

/*
Вызывается на старте
0 - ok
> 0 error
*/

int rwh_start()
{
    memset(do_val, 0, sizeof(int) * 256);
    memset(ao_val, 0, sizeof(float) * 256);
    memset(opt_val, 0, sizeof(int) * 256);

    return (-1);
}

/*
Вызывается на стопе
*/
void rwh_stop()
{
}

/*
Вызывается на старте
после вызова rwh_start()
для
типов
   1.15 IN, 1.31 OUT
   2.15 IN  2,31 OUT если канал FLOAT
*/
void rwh_aio_init(IA & ia)
{
}

/*
Вызывается на старте
после вызова rwh_start()
 2.15 IN  2,31 OUT если канал HEX32
*/
void rwh_dio_init(IA & ia)
{
}
/*
далее для всех фукций код возврата =
0   - успешно недостоверность сбрасывается
> 0 - ошибка недостоверность устанавливается

<type>v  - значение из 9 атрибута для записи
<type>v  - считанное значение для передачи во вход канала
*/

/*
тип 2.15, 2.31
получается в IDE из AI_RWH
*/
int rwh_aio_write_i32(IA & ia, int v)
{
    return(0);
}

/*
тип  2.15
получается в IDE из DI_RWH залинкованного на FLOAT  INPUT
*/
int rwh_aio_read_i32(IA & ia, int& v)
{
    return(0);
}

/*
тип  2.31
получается в IDE из DO_RWH залинкованного на FLOAT INPUT
*/
int rwh_aio_read_i32_readback(IA & ia, int& v)
{
    return(0);
}

/*
тип  1.31
получается в IDE из AO_RWH залинкованного на FLOAT  OUTPUT
*/
int rwh_aio_write_f32(IA & ia, float v)
{

    return(0);
}

/*
тип  1.15
получается в IDE из AI_RWH залинкованного на FLOAT INPUT
*/
int rwh_aio_read_f32(IA & ia, float& v)
{

  
    v = 5;

    return(0);
}

/*
тип  1.31
получается в IDE из AO_RWH залинкованного на FLOAT INPUT
*/
int rwh_aio_read_f32_readback(IA & ia, float& v)
{
    return(0);
}


/*
тип  2.31
получается в IDE из DO_RWH залинкованного на HEX  OUTPUT
*/
int rwh_dio_write(IA & ia, unsigned v)
{
    return(0);
}

/*
тип  2.15
получается в IDE из DI_RWH залинкованного на HEX  INPUT
*/
int rwh_dio_read(IA & ia, unsigned& v)
{
    return(0);
}

/*
тип  2.31
получается в IDE из DO_RWH залинкованного на HEX  INPUT
*/
int  rwh_dio_read_readback(IA & ia, unsigned& v)
{
    return(0);
}


/*
тип 2.127
получается в IDE из RWH OUTPUT
*/
int  rwh_opt_write(IA & ia, unsigned  v)
{
    return(0);
}
/*
тип 2.127
получается в IDE из RWH INPUT
*/
int  rwh_opt_read(IA & ia, unsigned& v)
{
    return(0);
}

.h #pragma once typedef union { unsigned char c[6]; unsigned short int i[3]; unsigned int ul; } IA;

/* для всех функций возвращающих значение 0 - ОК

0 - ошибка для чтения/записи возводится недостоверность

/ /

  • aio от FLOAT

  • dio от HEX

  • opt от тех и тех */

    // Вызывается на старте __declspec(dllexport) int rwh_start(); // Вызывается на стопе __declspec(dllexport) void rwh_stop();

    // Вызывается на старте после вызова rwh_start() // для каналов readback и opt не вызывается __declspec(dllexport) void rwh_aio_init(IA& ia); __declspec(dllexport) void rwh_dio_init(IA& ia);

    // к FLOAT привязаны источники DI_RWH DO_RWH __declspec(dllexport) int rwh_aio_write_i32(IA& ia, int v); __declspec(dllexport) int rwh_aio_read_i32(IA& ia, int& v); __declspec(dllexport) int rwh_aio_read_i32_readback(IA& ia, int& v);

    // к HEX привязаны источники DI_RWH DO_RWH __declspec(dllexport) int rwh_dio_write(IA& ia, unsigned v); __declspec(dllexport) int rwh_dio_read(IA& ia, unsigned& v); __declspec(dllexport) int rwh_dio_read_readback(IA& ia, unsigned& v);

    // к FLOAT привязаны источники AI_RWH AO_RWH __declspec(dllexport) int rwh_aio_read_f32(IA& ia, float& v); __declspec(dllexport) int rwh_aio_write_f32(IA& ia, float v); __declspec(dllexport) int rwh_aio_read_f32_readback(IA& ia, float& v);

    // к HEX/FLOAT привязаны источник RWH __declspec(dllexport) int rwh_opt_write(IA& ia, unsigned v); __declspec(dllexport) int rwh_opt_read(IA& ia, unsigned& v); заголовочник дернул с виндовского проекта, к линуксовскому доступа пока нету, но принцип у них один

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

О боже ты мой :-)

Давай не так сразу.

Распиши по шагам подробно, как ты что делаеш на винде и как на линуксе. Типа сохраняю такой то файл, нажимаю эту кнопку, потом это, потом копирую туда-то и т.п.

Как ты подключаешь свою библиотеку в Scada?

И используй markdown для оформления сообщений здесь (код оформляй) иначе тяжело читать.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)