WindowsのQT C ++プロジェクトにタグリブをコンパイルします
-
27-09-2019 - |
質問
現在、QT / C ++を使用して、C#から移動し、プラットフォームの境界から解放されようとしています。
私は古いプロジェクトでTaglibsharpを使用していましたが、ここにある元のC ++ソースを使用しようとしています。
http://developer.kde.org/~wheeler/taglib.html
私はこれを私のアプリケーションにコンパイルしようとしている傷ついた世界にいます。このLinuxベースのC ++の大部分は私にとって意味のないものであり、このライブラリをQTで私のプロジェクトに適切に含める方法を知りません。私は自分の作品の大部分(私ができる限り)にQTクリエーターを使用しています。
誰かが私に役立つチュートリアルやガイドを教えてもらえますか?私がこのソースで何をしているのかを理解するのに役立つものは何でも大歓迎です。 C#とWindowsのプログラミングを非常に徹底的に理解していますが、これらのタイプのオープンソースプロジェクトで何をしているのかについて、正確にはうまく処理できません。
ありがとう!
編集 - 答えはこちらですもう少し洗練された別の質問を投稿することにしました。
Windows用の静的タグリブ1.6.3ライブラリをコンパイルします
いくつかの古い編集...
私は現在、QTにコンパイルされていますが、「未定義の参照」エラーに遭遇しています。
*。プロ
INCLUDEPATH += ../$${TARGET}/taglib-win32
LIBS += -L"..\\$${TARGET}\\taglib-win32"
LIBS += -llibtag #It seems to want this to be a *.dll, not a *.a?
DEFINES += TAGLIB_NO_CONFIG
*.cpp
#include <tag.h>
#include <fileref.h>
...
//None of these work, even though they are similar to examples given in TagLib source.
TagLib::FileRef f("03.flac");
TagLib::String test = f.tag()->album();
TagLib::FileName *n = new TagLib::FileName("test");
TagLib::FileRef *f = new TagLib::FileRef();
正確なエラーの例をいくつか紹介します。
./debug\mythread.o:C:\Users\jocull\Documents\My Dropbox\Code\QT\QtTrayTime-build-desktop/../QtTrayTime/mythread.cpp:20: undefined reference to `_imp___ZN6TagLib7FileRefC1ENS_8FileNameEbNS_15AudioProperties9ReadStyleE'
./debug\mythread.o:C:\Users\jocull\Documents\My Dropbox\Code\QT\QtTrayTime-build-desktop/../QtTrayTime/mythread.cpp:21: undefined reference to `_imp___ZNK6TagLib7FileRef3tagEv'
./debug\mythread.o:C:\Users\jocull\Documents\My Dropbox\Code\QT\QtTrayTime-build-desktop/../QtTrayTime/mythread.cpp:42: undefined reference to `_imp___ZN6TagLib6StringD1Ev'
./debug\mythread.o:C:\Users\jocull\Documents\My Dropbox\Code\QT\QtTrayTime-build-desktop/../QtTrayTime/mythread.cpp:42: undefined reference to `_imp___ZN6TagLib7FileRefD1Ev'
collect2: ld returned 1 exit status
g ++(mac/linux)を使用したコマンドラインステップ
- ./CONFIGURE -ENABLE-SHARED = false -Enable-static = true
- 作る
- ??? no *.aまたは *.libファイルが作成されます
解決
今後の参照については、チェックしてください この郵便受け. 。 Windows 7 QTCreatorを介してTaglibをコンパイルした方法を概説しました。
他のヒント
C ++プログラミングを初めて使用する場合は、タスクを達成するために把握しなければならないいくつかの問題があります。
- ソースファイル(
*.cpp
)実際のソースコードが含まれている間、ヘッダーファイル(*.h
)ソースファイルの中にあるものを宣言するだけです。他のソースファイルからクラス/関数/変数を使用するすべてのヘッダーをソースファイルに含める必要があります。 - プリプロセッサがどのように機能するかを理解する必要があります。 AFAIK C#にはありません。ウィキペディアの記事では、良い概要を説明する必要があります。 http://en.wikipedia.org/wiki/c_preprocessor
- Taglibを動的ライブラリとして使用すると仮定すると、aglibを.dllとして構築するためのQTプロジェクトを作成する必要があります(.proファイルディレクティブ
TEMPLATE=lib
,CONFIG+=dll
) - ソースファイルから動的ライブラリを作成する場合は、後で使用する機能をエクスポート可能にマークする必要があります。タグリブでは、これはプリプロセッサマクロを定義することによって行われます
MAKE_TAGLIB_LIB
(あなたのaglib .proファイル:DEFINES+=MAKE_TAGLIB_LIB
) - 次に、ダイナミックライブラリを構築する必要があります(プロファイルで:
TEMPLATE=lib
, 、次に、タグリブのすべてのソースとヘッダーを追加します)。 GCCを使用すると、これは2つのファイルになりますTagLib.dll
とlibTagLib.a
. - アプリケーションを構築するときは、ソースにタグリブのヘッダーファイルを含める必要があり、コンパイラにライブラリについて伝えます(.proファイル:
LIBS+=libTagLib.a
) - コードには、ライブラリからヘッダーファイルを含めるだけです。使用したいとしましょう
TagLib::Tag
ソースファイルでは、そうする必要があります#include <taglib/tag.h>
;また、コンパイラ(正確にはプリプロセッサ)に見つけることができる場所に伝える必要がありますtaglib
ディレクトリ。 .proファイルでは、追加することでこれを行いますINCLUDEPATH+=/path/to/taglib
.
これらはです 大きなポイント そして、あなたがしなければならないことの詳細な説明ではありません。このポイントを認識したときに問題がある場合は、より詳細な質問をしてください。
詳細については、Qmakeマニュアルをご覧ください。 http://doc.trolltech.com/4.6/qmake-variable-reference.html#libs