私は非常にうまく機能する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からコピーしました。彼らが何をしているのか、私は実際には知りません。