Страниц: 1 [ 2] 3 4 ... 10
11
: Октябрь 25, 2024, 15:21
|
Автор demaker - Последний ответ от ssoft
|
Извините что сразу не уточнил Да в студии используется стандартный компилятор(msvc toolset), а в Qt MinGW32bit Т.е получается, что библа используемая в проекте должна быть собрана тем же компилятором что и сам проект иначе никак. Я правильно понимаю? Может можно как-то настроить? В C++ нет стандарта по экспорту методов при сборке библиотек, поэтому библиотеки совместимы только тогда, когда собраны одним и тем же компилятором. Такой стандарт есть в C, но тогда в C++ коде глобальные методы (для других нельзя) нужно задекларировать как C++ (Qt) // MyCFuncs.h #ifdef __cplusplus extern "C" { // only need to export C interface if // used by C++ source code #endif __declspec( dllimport ) void MyCFunc(); __declspec( dllimport ) void AnotherCFunc(); #ifdef __cplusplus } #endif
Далее небольшой геморрой с подготовкой файлов для другого компилятора Инструментами из состава MinGW для библиотеки требуется выполнить - Запустить gendef example.dll(сгенерирует example.def)
- Запустить dlltool -D example.dll -d example.def -l libexample.a(сгенерирует libexample.a)
- Использовать libexample.a вместе с example.dll для линковки с проектом на MinGW
И главное не напутать с битностью библиотеки, так как инструменты не выдают никаких ошибок). Такой подход следует использовать только тогда, когда нет исходных файлов example и он поставляется исключительно в виде готовой библиотеки, в противном случае это просто садомазохизм.
|
12
: Октябрь 25, 2024, 09:48
|
Автор demaker - Последний ответ от demaker
|
правда это на другой машине и там нету VS ну если там используется не тот же компилятор (msvc toolset), которым ты собрал библиотеку, то чему ты удивляешься. Видимо, мы должны сами угадать какой у тебя компилятор используется на другой машине. Извините что сразу не уточнил Да в студии используется стандартный компилятор(msvc toolset), а в Qt MinGW32bit Т.е получается, что библа используемая в проекте должна быть собрана тем же компилятором что и сам проект иначе никак. Я правильно понимаю? Может можно как-то настроить?
|
13
: Октябрь 24, 2024, 23:41
|
Автор demaker - Последний ответ от kambala
|
правда это на другой машине и там нету VS ну если там используется не тот же компилятор (msvc toolset), которым ты собрал библиотеку, то чему ты удивляешься. Видимо, мы должны сами угадать какой у тебя компилятор используется на другой машине.
|
14
: Октябрь 24, 2024, 22:31
|
Автор demaker - Последний ответ от demaker
|
Доброго времени суток! Имеется библиотека созданная в VS2022 Типа: example.h #pragma once
#ifdef EXAMPLE_EXPORTS #define EXAMPLE_API __declspec(dllexport) #else #define EXAMPLE_API __declspec(dllimport) #endif
EXAMPLE_API void Get_Example();
example.cpp #include "pch.h" #include "example.h" #include <iostream>
void Get_Example() { std::cout << "hello example\n"; }
Если я подключаю данную библиотеку к проекту на VS то все хорошо и работает. Если же к проекту на Qt (правда это на другой машине и там нету VS) то не работает выдается ошибка undefined reference to -Z..Get_Example..
В pro-файле указываю путь к .h и .lib - файлам INCLUDEPATH += "C:\path" LIBS += "C:\path\name.lib"
Но если в хедере библиотеки сделать ...
extern "C"{ EXAMPLE_API void Get_Example(); }
пересобрать и подключить к Qt проекту то все норм. Пытался сделать в .pro файле Qt проекта добавить дефайн DEFINES += EXAMPLE_EXPORTS
Но безуспешно( Кто-нибудь сталкивался с такой проблемой? Подскажите в чем может быть причина?
|
15
: Сентябрь 26, 2024, 13:06
|
Автор Александра - Последний ответ от ssoft
|
Еще есть вариант собрать hidapi в виде статической библиотеки. Тип указывается в настройках проекта в Visual Studio.
|
17
: Сентябрь 25, 2024, 12:53
|
Автор Александра - Последний ответ от Александра
|
Добрый день. Создаю проект, в котором нужно будет общаться с hid-устройством, чтобы контролировать зажигающиеся светодиоды. Сама я со сторонними библиотеками дело не имела, потому длительное изучение данной темы привело меня на небезызвестную (судя по ее упоминаниям) библиотеку hidapi с github'а. Саму библиотеку я скомпилировала, как было написано в README для WINDOWS на Visual studio, создала .dll, .lib файлы, стала подключать ее к проекту, который я пока не разбирала, но пример которого был взят с другого сайта, чтобы просто проверить хотя бы подключение библиотеки, не говоря уже о работе. Подключала я ее следующим образом: keykey.proQT -= gui CONFIG += c++11 console CONFIG -= app_bundle # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target INCLUDEPATH += $$PWD/. LIBS += -L$$PWD/./ -lhidapi
main.cpp#include <QCoreApplication> #include <stdio.h> #include <wchar.h> #include <string.h> #include <stdlib.h> #include "hidapi.h" #include <unistd.h> #define MAX_STR 255 int main(int argc, char *argv[]) { //QCoreApplication a(argc, argv); //return a.exec(); int res; unsigned char buf[256]; wchar_t wstr[MAX_STR]; hid_device *handle; int i; struct hid_device_info *devs, *cur_dev; if (hid_init()) return -1; devs = hid_enumerate(0x0, 0x0); cur_dev = devs; while (cur_dev) { printf("Device Found\n type: %04hx %04hx\n path: %s\n serial_number: %ls", cur_dev->vendor_id, cur_dev->product_id, cur_dev->path, cur_dev->serial_number); printf("\n"); printf(" Manufacturer: %ls\n", cur_dev->manufacturer_string); printf(" Product: %ls\n", cur_dev->product_string); printf(" Release: %hx\n", cur_dev->release_number); printf(" Interface: %d\n", cur_dev->interface_number); printf("\n"); cur_dev = cur_dev->next; } hid_free_enumeration(devs); // Set up the command buffer. memset(buf,0x00,sizeof(buf)); buf[0] = 0x01; buf[1] = 0x81; // Open the device using the VID, PID, // and optionally the Serial number. ////handle = hid_open(0x4d8, 0x3f, L"12345"); handle = hid_open(0x4d8, 0x3f, NULL); if (!handle) { printf("unable to open device\n"); return 1; } // Read the Manufacturer String wstr[0] = 0x0000; res = hid_get_manufacturer_string(handle, wstr, MAX_STR); if (res < 0) printf("Unable to read manufacturer string\n"); printf("Manufacturer String: %ls\n", wstr); // Read the Product String wstr[0] = 0x0000; res = hid_get_product_string(handle, wstr, MAX_STR); if (res < 0) printf("Unable to read product string\n"); printf("Product String: %ls\n", wstr); // Read the Serial Number String wstr[0] = 0x0000; res = hid_get_serial_number_string(handle, wstr, MAX_STR); if (res < 0) printf("Unable to read serial number string\n"); printf("Serial Number String: (%d) %ls", wstr[0], wstr); printf("\n"); // Read Indexed String 1 wstr[0] = 0x0000; res = hid_get_indexed_string(handle, 1, wstr, MAX_STR); if (res < 0) printf("Unable to read indexed string 1\n"); printf("Indexed String 1: %ls\n", wstr); // Set the hid_read() function to be non-blocking. hid_set_nonblocking(handle, 1); // Try to read from the device. There shoud be no // data here, but execution should not block. res = hid_read(handle, buf, 17); // Send a Feature Report to the device buf[0] = 0x2; buf[1] = 0xa0; buf[2] = 0x0a; buf[3] = 0x00; buf[4] = 0x00; res = hid_send_feature_report(handle, buf, 17); if (res < 0) { printf("Unable to send a feature report.\n"); } memset(buf,0,sizeof(buf)); // Read a Feature Report from the device buf[0] = 0x2; res = hid_get_feature_report(handle, buf, sizeof(buf)); if (res < 0) { printf("Unable to get a feature report.\n"); printf("%ls", hid_error(handle)); } else { // Print out the returned buffer. printf("Feature Report\n "); for (i = 0; i < res; i++) printf("%02hhx ", buf[i]); printf("\n"); } memset(buf,0,sizeof(buf)); // Toggle LED (cmd 0x80). The first byte is the report number (0x1). buf[0] = 0x1; buf[1] = 0x80; res = hid_write(handle, buf, 17); if (res < 0) { printf("Unable to write()\n"); printf("Error: %ls\n", hid_error(handle)); } // Request state (cmd 0x81). The first byte is the report number (0x1). buf[0] = 0x1; buf[1] = 0x81; hid_write(handle, buf, 17); if (res < 0) printf("Unable to write() (2)\n"); // Read requested state. hid_read() has been set to be // non-blocking by the call to hid_set_nonblocking() above. // This loop demonstrates the non-blocking nature of hid_read(). res = 0; while (res == 0) { res = hid_read(handle, buf, sizeof(buf)); if (res == 0) printf("waiting...\n"); if (res < 0) printf("Unable to read()\n"); usleep(500*1000); } printf("Data read:\n "); // Print out the returned buffer. for (i = 0; i < res; i++) printf("%02hhx ", buf[i]); printf("\n"); hid_close(handle); /* Free static HIDAPI objects. */ hid_exit(); return 0; }
Но у меня везде, где упоминаются методы из библиотеки показывается сообщение такого вида: undefined reference to `hid_init' Все файлы у меня находятся в одной папке и имеют следующий вид: keykey: | hidapi.dll | hidapi.h | hidapi.lib | keykey.pro | main.cpp Помогите, пожалуйста, разобраться, в чем проблема. Я уже множество разных методов перепробовала: и указывать в либсе .dll, и указывать .lib, и располагать файлы в друих местах. Но что интересно, если я на F2 буду переходить по ссылкам относительно какой-то функции, то меня отправляет в файл "hidapi.h" без каких-то проблем. Заранее извиняюсь за мое невежество: в интернете много новой и сложной для меня информации, поэтому могу жёстко "косячить"...
|
18
: Сентябрь 21, 2024, 10:13
|
Автор KSergeyP - Последний ответ от qate
|
никак, забить
но можно создать и багрепорт, это проблема qt - пусть сами и исправляют
|
19
: Сентябрь 20, 2024, 11:57
|
Автор denantikvar - Последний ответ от denantikvar
|
Куплю, обмен фунты выпущенные в Шотландии или Северной Ирландии , вышедшие из обращения Немецкие марки, Японские йены ( иены Япония ), Норвежские кроны, Датские кроны, Шведские кроны, просроченные европейские банкноты и другую редкую валюту некоторых развитых стран, которую нельзя сдать в обменник. +79997153560 WhatsApp, Viber Сайт где можно сделать обмен старых просроченных банкнот https://www.skupka.kvt777.ru/skupka-banknot.htmlГруппа ВК для обмена старых швейцарских франков https://vk.com/obmen_frankovГруппа ВК для обмена старых английских фунтов стерлингов https://vk.com/obmen_funtov
|
20
: Сентябрь 19, 2024, 11:21
|
Автор KSergeyP - Последний ответ от KSergeyP
|
Добрый день! Собираю Qt6.7.2 из исходников под Linux. Сборка проходит без ошибок но есть несколько предупреждений: Warning: private/qt3dquickvaluetypes_p.h:: QColor is declared as foreign type, but cannot be found. Warning: private/qt3dquickvaluetypes_p.h:: QMatrix4x4 is declared as foreign type, but cannot be found. Warning: private/qt3dquickvaluetypes_p.h:: QQuaternion is declared as foreign type, but cannot be found. Warning: private/qt3dquickvaluetypes_p.h:: QVector2D is declared as foreign type, but cannot be found. Warning: private/qt3dquickvaluetypes_p.h:: QVector3D is declared as foreign type, but cannot be found. Warning: private/qt3dquickvaluetypes_p.h:: QVector4D is declared as foreign type, but cannot be found. Warning: private/qpositioningquickmodule_p.h:: QGeoAddress is declared as foreign type, but cannot be found. Warning: private/qpositioningquickmodule_p.h:: QGeoLocation is declared as foreign type, but cannot be found. Warning: private/qpositioningquickmodule_p.h:: QGeoPositionInfo is declared as foreign type, but cannot be found. Warning: private/foreigntypes_p.h:: QTouch3DInputHandler is declared as foreign type, but cannot be found. Warning: private/foreigntypes_p.h:: Refusing to generate non-lowercase name TouchInputHandler3D for unknown foreign type qwltexturesharingextension_p.h:62:1: warning: Property declaration imageSearchPath has neither an associated QProperty<> member, nor a READ accessor function nor an associated MEMBER variable. The property will be invalid. QTextToSpeechMockPlugin.dir/QTextToSpeechMockPlugin_autogen/mocs_compilation.cpp.o [12338/13046] Automatic QML type registration for target WaylandCompositor Warning: qwaylandidleinhibitv1.h:: QWaylandCompositorExtensionTemplate<QWaylandIdleInhibitManagerV1> is used but cannot be found. Warning: qwaylandqttextinputmethodmanager.h:: QWaylandCompositorExtensionTemplate<QWaylandQtTextInputMethodManager> is used but cannot be found. Warning: qwaylandqtwindowmanager.h:: QWaylandCompositorExtensionTemplate<QWaylandQtWindowManager> is used but cannot be found. Warning: qwaylandtextinputmanager.h:: QWaylandCompositorExtensionTemplate<QWaylandTextInputManager> is used but cannot be found. Warning: qwaylandtextinputmanagerv3.h:: QWaylandCompositorExtensionTemplate<QWaylandTextInputManagerV3> is used but cannot be found.
Может кто то подсказать как от них избавиться, хотя бы от каких либо из перечисленных? Нужно доустановить какие-то dev пакеты в Linux? Понятно что для разных предупреждений какие-то свои зависимости должны быть.
|
Страниц: 1 [ 2] 3 4 ... 10 |