2

私は現在、Qt / C ++を使用して、C#から移行し、プラットフォームの境界から抜け出そうとしています。

以前のプロジェクトでTagLibSharpを使用していましたが、現在、次の場所にある元のC++ソースを使用しようとしています。

http://developer.kde.org/~wheeler/taglib.html

私はこれを自分のアプリケーションにコンパイルしようとして傷ついた世界にいます。このLinuxベースのC++のほとんどは私にはぎこちなく、Qtを使用してこのライブラリをプロジェクトに適切に含める方法がわかりません。私は自分の仕事の大部分(可能な限りすべて)にQtCreatorを使用しています。

誰かが私にいくつかの役立つチュートリアルやガイドを教えてもらえますか?私がこの情報源で何をしているのかを理解するのに役立つものがあれば、大いに感謝します。私はC#とWindowsプログラミングについて非常に完全に理解していますが、これらのタイプのオープンソースプロジェクトで何をしているのかを正確に把握していません。

ありがとう!

編集-答えはここ にあります私はそれのためにもう少し洗練された別の質問を投稿することにしました。

Windows用の静的TagLib1.6.3ライブラリのコンパイル

いくつかの古い編集...

TagLibを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)

  1. ./configure --enable-shared = false --enable-static = true
  2. 作る
  3. ??? *.aまたは*.libファイルは作成されません
4

2 に答える 2

3

今後の参考のために、この投稿をチェックしてください。Windows7QtCreatorを使用してTagLibをコンパイルする方法の概要を説明しました。

于 2010-11-15T18:28:59.303 に答える
2

C ++プログラミングに慣れていない場合は、タスクを実行するために把握する必要のあるいくつかの問題があります。

  • ソースファイル(*.cpp)には実際のソースコードが含まれていますが、ヘッダーファイル(*.h)はソースファイルの内容を宣言するだけです。他のソースファイルのクラス/関数/変数を使用するすべてのヘッダーをソースファイルに含める必要があります。
  • プリプロセッサがどのように機能するかを理解する必要があります。AFAIK C#にはありません。ウィキペディアの記事はあなたに良い概要を与えるはずです:http://en.wikipedia.org/wiki/C_preprocessor
  • TagLibをダイナミックライブラリとして使用する場合は、TagLibを.dllとしてビルドするためのQtプロジェクトを作成する必要があります(.proファイルディレクティブTEMPLATE=libCONFIG+=dll
  • ソースファイルからダイナミックライブラリを作成する場合は、後で使用する関数をエクスポート可能としてマークする必要があります。TagLibでは、これはプリプロセッサマクロを定義することによって行われMAKE_TAGLIB_LIBます( taglib.proファイルでDEFINES+=MAKE_TAGLIB_LIB:)
  • 次に、ダイナミックライブラリを構築する必要があります(プロファイルで:TEMPLATE=lib、次にtaglibのすべてのソースとヘッダーを追加します)。gccを使用すると、2つのファイルTagLib.dllとが作成されますlibTagLib.a
  • アプリケーションをビルドするときは、ソースにTagLibのヘッダーファイルをインクルードし、ライブラリについてコンパイラに通知する必要があります(.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

于 2010-10-05T08:52:55.640 に答える