2009-03-15 2 views
0

qt를 사용하고 win xp/vista에서 실행되는 데스크톱 응용 프로그램을 개발 중입니다.qt 타사 헤더 및 라이브러리에 대한 경로 추가

제 3 자 라이브러리 UserAgentLib (정적 및 공유)이 있습니다. 그러나 qt 생성자에서 연결하는 방법을 모르겠습니다.

* .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 

나는 내가 UserAgentLib.h 파일의 선언에 대해 100 오류를 얻을로는, 헤더 파일을 찾을 않는 생각이라고합니다. 그러나 나는 그것이 도서관과 연결되어 있다고 생각하지 않는다. 어떤 제안에 대한

많은 감사,

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

내가 VS C에서 매우 간단한 라이브러리를 작성해야 ++ 다음은 헤더 및 소스 파일에 대한 코드입니다. 헤더 :

// 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; 
} 

. 그리고 VS 2008의 WIN32 콘솔 응용 프로그램과 연결하여 테스트했습니다. 라이브러리가 예상대로 작동했습니다.

이제 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/빈 /../ lib 디렉토리를/gcc/mingw32/3.4.5 /../../../ libmingw32.a (main.o) : main.c :: - 1 : 오류 : 'WinMain @ 16'에 대한 정의되지 않은 참조

: - 1 : 오류 : collect2 : ld가 1 종료 상태를 반환했습니다.

프로젝트 testlibrary에 대한 빌드 단계를 실행

...

만들기 GDB 매크로 라이브러리 ...

구성 변경, qmake를 단계를 건너 뛰는 :

는 그리고 이것들은 컴파일 문제입니다.

시작 : C : /Qt/mingw/bin/mingw32-make.exe 디버그 -w

mingw32-메이크업 : 입력 디렉토리`D :/프로젝트/TestQTLibrary/testlibrary '

C :/입력 디렉토리`D :/프로젝트/TestQTLibrary/testlibrary '

그램 ++ -enable-stdcall을-픽스 -Wl, -enable Qt는 /와 Mingw/빈/Makefile.Debug mingw32-만들 [1] -f mingw32-하기 -auto-import -Wl, -enable-runtime-pseudo-reloc -Wl, -subsystem, console -mthreads -Wl -o debug \ testlibrary.EXE -L "C : \ Qt를 \ Qt를 \ lib에"

D : 떠나 디렉토리`D : 프로젝트 \ TestLibrary \ mathsLibrary \ 디버그 \ mathsLibrary.lib -lQtCored4 mingw32-만들기 [1] \/프로젝트/TestQTLibrary/testlibrary '

mingw32-메이크업 : 디렉토리를 떠나`D :/프로젝트/TestQTLibrary/testlibrary'

C :/Qt는 /와 Mingw/빈 /../ lib 디렉토리/GCC/mingw32/3.4.5 /. ./../../libmingw32.a(main.o):main.c :

(는 .text + 적용됨 0x104) LD 1 개 종료 상태 mingw32 반환 collect2가의 WinMain @ 16 ''로 정의 참조 - 막 전자 [1] : * [디버그 \의 testlibrary.exe] 오류 1 mingw32-메이크업 :

를 '확인'단계를 구축 실행할 때 testlibrary 프로젝트를 구축하는 동안 * [디버그] 오류 2 코드 2 오류로 종료

많은 조언을 주셔서 감사합니다.

답변

1

컴파일러 오류가 발생하는 경우 UserAgentLib.h에 포함되지 않은 것 같습니다. 당신은 그것을 테스트 할 수

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

당신은 .pro 파일 중 하나가 아닌 constructor.See this에 위를했습니다.

라이브러리가 링크되지 않은 경우 (응용 프로그램이 잘 컴파일 된 이후) - LIBS += ... 행을 사용하여 조정해야하지만, 언뜻보기에는 괜찮습니다.

+0

안녕하세요, 생성자에 코드를 입력했습니다. 그러나 컴파일 오류로 인해 프로그램이 실행되지 않습니다. 어쩌면 내 도서관. 라이브러리는 VS 2005로 컴파일되었습니다. – ant2009

1

먼저 간단한 라이브러리로 이것을 시도한 다음 실제로 작동시키려는 라이브러리로 시도하십시오. 당신의 .HPP 파일에서

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

, 함수 선언 앞에 통근자 "C"를 추가 :
// mathslibrary.hpp 
extern "C" int add_numbers(const int a, const int b); 

비주얼 스튜디오에서 라이브러리를 다시 빌드합니다.

이제 Qt Creater로 테스트 응용 프로그램을 컴파일 할 수 있어야합니다. 그런 다음 해당 dll을 새 실행 파일로 디렉토리에 복사하고 실행하십시오. 이 아무것도 변경하는 경우

+0

안녕하세요, 확장을 추가하여 dll과 lib 모두를 시도했습니다. LIBS + = D : \ Projects \ qtDialer \ tools \ lib \ UserAgentLib.lib LIBS + = D : \ Projects \ qtDialer \ tools \ lib \ UserAgentLib.dll 라이브러리는 WIN32 Visual Studio 2005로 컴파일되었습니다.차이가 있습니까? 조언을 주셔서 감사합니다 – ant2009

+0

visual studio는 사용하지 않지만 Visual Studio에서 생성 한 라이브러리 파일의 전체 이름을 사용해야합니다. 나는 단지 그 확장을 가능성으로 제안하고 있었다. –

+0

당신이 시도해 볼 수있는 또 다른 한 가지 .. qmake는 실제로 슬래시를 선호합니다. 백 슬래시를 사용해야하는 경우 '\\'와 같이 이중으로 표시하십시오. –

2

이 몰라,하지만 어쩌면 당신이이처럼 정의 할 수 있습니다

LIBS += -LD:/Projects/qtDialer/tools/lib -lUserAgentLib 
1

를 지금까지 내가 이해, 당신은 MSVC를 사용하여 DLL을 생성하고 지금은 그것을 연결하려고 mtw를 사용하는 Qt에서. 권리?

Object files and static libraries created with different compilers, or even with significantly different releases of the same compiler, often cannot be linked together. This issue is not specific to MinGW: many other compilers are mutually incompatible. Build everything from source with the same version of the same compiler if you can

프라하, 단이 아웃 : http://chadaustin.me/cppinterface.html

관련 문제