2009-03-15 19 views
0

私はqtを使用して、win xp/vistaで動作するデスクトップアプリケーションを開発しています。qtサードパーティのヘッダとライブラリのパスを追加する

私はサードパーティのライブラリ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の/ binに/../ libに/ gcc/mingw32/3.4.5 /../../../ libmingw32.a(main.o):main.c :: - 1:エラー: `WinMain @ 16 'への未定義参照

: - 1:エラー:collect2:ldが1の終了ステータスを返しました

... qmakeのステップをスキップしてそのまま

設定、プロジェクトtestlibraryのための手順を構築実行

... gdbのマクロライブラリを作成

そして、これらは、コンパイルの問題です。

開始:C:/Qt/mingw/bin/mingw32-make.exeデバッグ-w

MINGW32-メイク:ディレクトリ `D:/プロジェクト/ TestQTLibrary/testlibrary」

C:/ QT/mingwの/ binに/ MINGW32-する-f Makefile.Debug MINGW32-する[1]:入力ディレクトリ `D:-enable /プロジェクト/ TestQTLibrary/testlibrary」

グラム++ -enable-STDCALL・フィックスアップ-Wl、 -auto-import -Wl、-enable-runtime-pseudo-reloc -Wl、-subsystem、console -mthreads -Wl -o debug \ testlibrary。exeファイル-L "C:\ Qtの\ qtの\ libに"

D:プロジェクト\ TestLibrary \ mathsLibrary \デバッグ\ mathsLibrary.lib -lQtCored4 MINGW32-作る\ [1]:残しディレクトリ `D:/プロジェクト/ TestQTLibrary/testlibrary '

MINGW32-メイク:ディレクトリを残す `D:/プロジェクト/ TestQTLibrary/testlibrary'

C:/ QT/mingwの/ binに/../ libに/ gccを/ MINGW32/3.4.5 /。 ./../../libmingw32.a(main.o):main.c:

(の.text + 0x104): `16' collect2は@ WINMAINに未定義参照:LDは1終了ステータス MINGW32を返さ-mak E [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 

、あなたの関数の宣言の前にextern "C" を追加します。
// mathslibrary.hpp 
extern "C" int add_numbers(const int a, const int b); 

は、Visual Studioからライブラリを再構築します。

これで、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

あなたが試してみてくれるもう1つのこと.. qmakeは本当にスラッシュを好む。バックスラッシュを使用する必要がある場合は、この '\\'のように二重にします。 –

2

は知らないが、多分あなたは、このようにそれを定義する必要があります。

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

は、私の知る限り理解されるように、あなたはMSVCを使用してDLLを生成し、今はそれをリンクしようとしていますmingwを使って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

chechこのうち:http://chadaustin.me/cppinterface.html

関連する問題