1

私は非常にうまく機能するGCCプラグインを作成しました。プラグインを作成するために次のコマンドを実行するMakefileを作成しました。

$ g++ -I$(INCLUDE_PATHS) -fPIC -shared $(SOURCE_PATHS) -o Plugin.so

次のコマンドでプラグインを実行します。

$ g++ -S -fplugin=./Plugin.so /TestProgramm.cpp

これはかなりうまくいきます。プラグインを呼び出すときにQTGUIを表示したいと思います。EclipseでGUIを作成したので、自動生成されたMakeFileを入手しました。GUIを実行すると、Eclipseは次のコマンドを実行します。

g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I$(QT_INCLUDE_PATHS) -o debug/GUI.o GUI.cpp

g++ -Wl,-rpath,/opt/QtSDK/Desktop/Qt/4.8.1/gcc/lib -o GraphGUI debug/GUI.o debug/main.o debug/GraphGUI.o debug/moc_GraphGUI.o -L/opt/QtSDK/Desktop/Qt/4.8.1/gcc/lib -lQtGui -L/opt/QtSDK/Desktop/Qt/4.8.1/gcc/lib -L/usr/X11R6/lib -lQtCore -lpthread

GraphGUIとGUIは、私が書いたGUIのクラスです。

次に、これらのステートメントを自分のMakefileに組み合わせて、コンパイラーがプラグインとGUIをコンパイルできるようにします。私は数日前にMakefilesを使い始めたので、Makefilesの基本しか理解できませんでした。誰かが私を助けてくれることを願っています。

これが私のMakefileです:

GCC := g++
FILENAME := Explorer.so

GCC_INCLUDE := -I/usr/lib/gcc/i686-linux-gnu/4.6/plugin/include
QT_INCLUDE := -I/opt/QtSDK/Desktop/Qt/4.8.1/gcc/mkspecs/default \
              -I/opt/QtSDK/Desktop/Qt/4.8.1/gcc/include/QtCore \
              -I/opt/QtSDK/Desktop/Qt/4.8.1/gcc/include/QtGui \
              -I/opt/QtSDK/Desktop/Qt/4.8.1/gcc/include 

SOURCE_FILES = ## Some .cpp files for the plugin ##


$(FILENAME): 

    @$(GCC) $(GCC_INCLUDE) -fPIC -shared $(SOURCE_FILES) -o $@ $^

clean:
    @rm $(FILENAME)

GUIのオブジェクトファイルを作成してから、プラグインを作成するコマンドにそれらを含めてみました。このような:

    $(GCC) -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED $(QT_INCLUDE) -Idebug -I. -o debug/GUI.o src/Visualize/GUI.cpp

    $(GCC) -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED $(QT_INCLUDE) -Idebug -I. -o debug/GraphGUI.o src/Visualize/GraphGUI.cpp

    # /opt/QtSDK/Desktop/Qt/4.8.1/gcc/bin/moc -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED $(QT_INCLUDE) -Idebug -I. src/Visualize/GraphGUI.h -o debug/moc_GraphGUI.cpp

    # $(GCC) -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED $(QT_INCLUDE) -Idebug -I. -o debug/moc_GraphGUI.o debug/moc_GraphGUI.cpp

    $(GCC) $(PLUGIN_INCLUDE) -fPIC -shared $(SOURCE_FILES) debug/GraphGUI.o debug/GUI.o -o $@ $^

このように実行すると、未定義のシンボルが表示されます:_ZN11QMainWindowC2EP7QWidget6QFlagsIN2Qt10WindowTypeEEエラー。「#」で始まる2つのコマンドも実行すると、「mainへの未定義の参照」が表示されます。これらのコマンドをEclipseからコピーしました。彼らが何をしているのか、私は実際には知りません。

4

0 に答える 0