qt добавить путь для стороннего заголовка и библиотек - PullRequest
0 голосов
/ 15 марта 2009

Я использую qt и разрабатываю настольное приложение, которое будет работать под win xp / vista.

У меня есть сторонняя библиотека UserAgentLib (статическая и общая). Но я не уверен, как сделать ссылку в Qt Creator.

Я открыл файл * .pro и добавил мою библиотеку и путь к заголовку. Библиотека называется UserAgentLib, а заголовочный файл называется UserAgentLib.h

TARGET = Dialer
TEMPLATE = app

LIBS += D:\Projects\qtDialer\tools\lib\UserAgentLib
INCLUDEPATH += D:\Projects\qtDialer\tools\inc

SOURCES += main.cpp\
        catdialer.cpp

HEADERS  += catdialer.h

FORMS    += catdialer.ui

Я думаю, что он находит файл заголовка, так как я получаю около 100 ошибок для объявлений в файле UserAgentLib.h. Однако я не думаю, что это связь с библиотекой.

Большое спасибо за любые предложения,

======================

Я создал очень простую библиотеку в VS C ++ 2008. Вот код для заголовка и исходного файла. Заголовок:

// mathslibrary.hpp
int add_numbers(const int a, const int b);

Источник:

// mathslibrary.cpp
#include "mathslibrary.hpp"
int add_numbers(const int a, const int b)
{
return a + b;
}

Я скомпилировал это в библиотеку. И протестировано путем связывания с консольным приложением WIN32 в VS 2008. Библиотека работала, как и ожидалось.

Теперь, когда я пытаюсь связать с qt.

#include <QtCore/QCoreApplication>
#include <iostream>
#include "mathslibrary.hpp"
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    std::cout << "add numbers 40 + 60 = " << add_numbers(40, 60) << std::endl;
    return a.exec();
}

Это мой файл qmake:

QT       -= gui
TARGET = testlibrary
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app
LIBS = D:\Projects\TestLibrary\mathsLibrary\Debug\mathsLibrary.lib
INCLUDEPATH = D:\Projects\TestLibrary\mathsLibrary\
SOURCES += main.cpp

Вот ошибки, которые я получаю, когда пытаюсь собрать:

C: / Qt / MinGW / бен /../ Библиотека / GCC / mingw32 / 3.4.5 /../../../ libmingw32.a (main.o): main.c :: - 1 : ошибка: неопределенная ссылка на `WinMain @ 16 '

: - 1: ошибка: collect2: ld вернул 1 состояние выхода

И вот проблемы с компиляцией:

Выполнение шагов сборки для тестовой библиотеки проекта ...

Создание библиотеки макросов gdb ...

Конфигурация без изменений, пропуская шаг QMake.

Запуск: C: /Qt/mingw/bin/mingw32-make.exe отладка -w

mingw32-make: вход в каталог `D: / Projects / TestQTLibrary / testlibrary '

C: / Qt / mingw / bin / mingw32-make -f Makefile.Debug mingw32-make [1]: вход в каталог `D: / Projects / TestQTLibrary / testlibrary '

g ++ -enable-stdcall-fixup -Wl, -enable-auto-import -Wl, -enable-runtime-псевдо-перемещение -Wl, -подсистема, консоль -mthreads -Wl -o debug \ testlibrary.exe -L "c: \ Qt \ qt \ lib"

D: \ Projects \ TestLibrary \ mathsLibrary \ Debug \ mathsLibrary.lib -lQtCored4 mingw32-make [1]: выход из каталога `D: / Projects / TestQTLibrary / testlibrary '

mingw32-make: выход из каталога `D: / Projects / TestQTLibrary / testlibrary '

C: / Qt / MinGW / бен /../ Библиотека / GCC / mingw32 / 3.4.5 /../../../ libmingw32.a (main.o): main.c:

(. Text + 0x104): неопределенная ссылка на `WinMain @ 16 ' collect2: ld вернул 1 статус выхода mingw32-make [1]: * [debug \ testlibrary.exe] Ошибка 1 mingw32-make: * [отладка] Ошибка 2 Выход с кодом 2. Ошибка при создании тестовой библиотеки проекта При выполнении шага сборки 'Make'

Большое спасибо за любой совет,

Ответы [ 4 ]

3 голосов
/ 25 марта 2009

Не знаю, меняет ли это что-нибудь, но, возможно, вам нужно определить это так:

LIBS += -LD:/Projects/qtDialer/tools/lib -lUserAgentLib
1 голос
/ 20 ноября 2013

Насколько я понял, вы сгенерировали dll с помощью MSVC и теперь вы пытаетесь связать его в Qt с помощью mingw. право

Объектные файлы и статические библиотеки, созданные с помощью разных компиляторов, или даже со значительно отличающимися выпусками одного и того же компилятора, часто не могут быть связаны друг с другом. Эта проблема не относится к MinGW: многие другие компиляторы взаимно несовместимы. Построить все из исходник с той же версией того же компилятора, если вы можете

Проверьте это: http://chadaustin.me/cppinterface.html

1 голос
/ 15 марта 2009

Попробуйте сначала с простой библиотекой, а затем с библиотекой, которую вы фактически пытаетесь заставить работать.

 LIBS += D:\Projects\qtDialer\tools\lib\mathsLibrary.lib

В вашем .hpp файле добавьте extern "C" перед объявлениями функций:

// mathslibrary.hpp
extern "C" int add_numbers(const int a, const int b);

Перестройте библиотеку из Visual Studio.

Теперь вы сможете скомпилировать ваше тестовое приложение с помощью Qt Creater. Затем скопируйте соответствующий dll в каталог с новым исполняемым файлом и запустите его.

1 голос
/ 15 марта 2009

Если вы получаете ошибки компилятора, то ваш UserAgentLib.h, вероятно, не был включен. Вы можете проверить это с:

!exists( UserAgentLib.h ) {
 error( "No UserAgentLib.h file found" )
}

Вы помещаете вышеупомянутое в один из .pro файлов, а не в конструктор. См. this .

Если библиотека не была связана (что происходит после того, как ваше приложение хорошо скомпилировано) - вам нужно повозиться со строкой LIBS += ..., хотя на первый взгляд это выглядит нормально.

...