Название: Библиотека NMEA Library динамическая библиотека на Qt
Отправлено: Kirill_m от Сентябрь 17, 2012, 16:31
Доброе время суток. Есть библиотека NMEA Library (http://nmea.sourceforge.net) Исходники уже оформлены под динамическую библиотеку. Но надо обернуть её в qt, сделал динамическую библиотеку, сделал pro фаил правильно. подключается, но при попытке вызовов методов unresolved external symbol _nmea_parse referenced in function _mainPro фаил QT -= gui
TARGET = QNmeaLib TEMPLATE = lib VERSION = 1.0.0
DEFINES += QNMEALIB_LIBRARY
SOURCES += \ src/tok.c \ src/time.c \ src/sentence.c \ src/parser.c \ src/parse.c \ src/info.c \ src/gmath.c \ src/generator.c \ src/generate.c \ src/context.c
HEADERS +=\ QNmeaLib_global.h \ include/nmea/units.h \ include/nmea/tok.h \ include/nmea/time.h \ include/nmea/sentence.h \ include/nmea/parser.h \ include/nmea/parse.h \ include/nmea/nmea.h \ include/nmea/info.h \ include/nmea/gmath.h \ include/nmea/generator.h \ include/nmea/generate.h \ include/nmea/context.h \ include/nmea/config.h
symbian { MMP_RULES += EXPORTUNFROZEN TARGET.UID3 = 0xED4313FA TARGET.CAPABILITY = TARGET.EPOCALLOWDLLDATA = 1 addFiles.sources = QNmeaLib.dll addFiles.path = !:/sys/bin DEPLOYMENT += addFiles }
unix:!symbian { maemo5 { target.path = /opt/usr/lib } else { target.path = /usr/lib } INSTALLS += target } Пример кода одно из хедоров библиотеки /* * * NMEA library * URL: http://nmea.sourceforge.net * Author: Tim (xtimor@gmail.com) * Licence: http://www.gnu.org/licenses/lgpl.html * $Id: generator.h 4 2007-08-27 13:11:03Z xtimor $ * */
#ifndef __NMEA_GENERATOR_H__ #define __NMEA_GENERATOR_H__
#include "info.h"
#ifdef __cplusplus extern "C" { #endif
/* * high level */
struct _nmeaGENERATOR;
enum nmeaGENTYPE { NMEA_GEN_NOISE = 0, NMEA_GEN_STATIC, NMEA_GEN_ROTATE,
NMEA_GEN_SAT_STATIC, NMEA_GEN_SAT_ROTATE, NMEA_GEN_POS_RANDMOVE,
NMEA_GEN_LAST };
struct _nmeaGENERATOR * nmea_create_generator(int type, nmeaINFO *info); void nmea_destroy_generator(struct _nmeaGENERATOR *gen);
int nmea_generate_from( char *buff, int buff_sz, /* buffer */ nmeaINFO *info, /* source info */ struct _nmeaGENERATOR *gen, /* generator */ int generate_mask /* mask of sentence`s (e.g. GPGGA | GPGSA) */ );
/* * low level */
typedef int (*nmeaNMEA_GEN_INIT)(struct _nmeaGENERATOR *gen, nmeaINFO *info); typedef int (*nmeaNMEA_GEN_LOOP)(struct _nmeaGENERATOR *gen, nmeaINFO *info); typedef int (*nmeaNMEA_GEN_RESET)(struct _nmeaGENERATOR *gen, nmeaINFO *info); typedef int (*nmeaNMEA_GEN_DESTROY)(struct _nmeaGENERATOR *gen);
typedef struct _nmeaGENERATOR { void *gen_data; nmeaNMEA_GEN_INIT init_call; nmeaNMEA_GEN_LOOP loop_call; nmeaNMEA_GEN_RESET reset_call; nmeaNMEA_GEN_DESTROY destroy_call; struct _nmeaGENERATOR *next;
} nmeaGENERATOR;
int nmea_gen_init(nmeaGENERATOR *gen, nmeaINFO *info); int nmea_gen_loop(nmeaGENERATOR *gen, nmeaINFO *info); int nmea_gen_reset(nmeaGENERATOR *gen, nmeaINFO *info); void nmea_gen_destroy(nmeaGENERATOR *gen); void nmea_gen_add(nmeaGENERATOR *to, nmeaGENERATOR *gen);
#ifdef __cplusplus } #endif
#endif /* __NMEA_GENERATOR_H__ */
Ну и пример Pro файла тестовой программы QT += core
QT -= gui
TARGET = TestLib CONFIG += console CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -lQNmeaLib1 else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -lQNmeaLib1d else:symbian: LIBS += -lQNmeaLib1 else:unix: LIBS += -L$$PWD/lib/ -lQNmeaLib1
INCLUDEPATH += $$PWD/include DEPENDPATH += $$PWD/include И Cpp #include <QtCore/QCoreApplication> #include <nmea.h> #include <string.h>
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); const char *buff[] = { "$GPRMC,173843,A,3349.896,N,11808.521,W,000.0,360.0,230108,013.4,E*69\r\n", "$GPGGA,111609.14,5001.27,N,3613.06,E,3,08,0.0,10.2,M,0.0,M,0.0,0000*70\r\n", "$GPGSV,2,1,08,01,05,005,80,02,05,050,80,03,05,095,80,04,05,140,80*7f\r\n", "$GPGSV,2,2,08,05,05,185,80,06,05,230,80,07,05,275,80,08,05,320,80*71\r\n", "$GPGSA,A,3,01,02,03,04,05,06,07,08,00,00,00,00,0.0,0.0,0.0*3a\r\n", "$GPRMC,111609.14,A,5001.27,N,3613.06,E,11.2,0.0,261206,0.0,E*50\r\n", "$GPVTG,217.5,T,208.8,M,000.00,N,000.01,K*4C\r\n" };
int it; nmeaINFO info; nmeaPARSER parser;
nmea_zero_INFO(&info); nmea_parser_init(&parser);
for(it = 0; it < 6; ++it) nmea_parse(&parser, buff[it], (int)strlen(buff[it]), &info);
nmea_parser_destroy(&parser);
return a.exec(); }
Помогите решить проблему.. замучился уже
Название: Re: Библиотека NMEA Library динамическая библиотека на Qt
Отправлено: alex312 от Сентябрь 17, 2012, 19:28
Выглядит похоже на то, что библиотека не подключается. попробуй подключить ее без всяких условий.
Название: Re: Библиотека NMEA Library динамическая библиотека на Qt
Отправлено: Kirill_m от Сентябрь 18, 2012, 12:58
Подключил просто без условий. QT += core
QT -= gui
TARGET = TestLib CONFIG += console CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
LIBS += -L$$PWD/lib/ -lQNmeaLib
INCLUDEPATH += $$PWD/include DEPENDPATH += $$PWD/include Вот не понимаю почему так. Если библиотеку собрать или с помощью VS или gcc в линухах и подключить, то да думаю будет нормально работать. А вот оборачивать в Qt не хочет, хотя все правильно по идеи
Название: Re: Библиотека NMEA Library динамическая библиотека на Qt
Отправлено: Maxz от Сентябрь 19, 2012, 08:46
Могу ошибиться, но: .PRO библиотеки .PRO проекта LIBS += -L$$PWD/lib/NmeaLib.a -lm
|