2

私は現在、Stroustrup の本 Programming: Principles and Practice Using C++ で c++ を学んでおり、第 12 章にいます。現在、特定のヘッダーが機能する FLTK を取得するために日々努力しています。

MacPorts で FLTK をインストールしました。Simple_window.h を含むコードをコンパイルしようとすると、次のエラーが発生します。

bash-3.2# fltk-config --compile main.cpp

/usr/bin/g++-4.2 -arch i386 -I/opt/local/include -pipe -arch i386 -arch i386 
-D_THREAD_SAFE -D_REENTRANT -o main main.cpp -arch i386 -arch i386
 /opt/local/lib/libfltk.a -lpthread -framework Carbon -framework 
ApplicationServices 

Undefined symbols:
  "vtable for Graph_lib::Window", referenced from:
      __ZTVN9Graph_lib6WindowE$non_lazy_ptr in cc1oxcSA.o
     (maybe you meant: __ZTVN9Graph_lib6WindowE$non_lazy_ptr)
  "vtable for Graph_lib::Button", referenced from:
      __ZTVN9Graph_lib6ButtonE$non_lazy_ptr in cc1oxcSA.o
 (maybe you meant: __ZTVN9Graph_lib6ButtonE$non_lazy_ptr)
  "Simple_window::Simple_window(Point, int, int, String const&)", referenced from:
  _main in cc1oxcSA.o
  "Graph_lib::Window::draw()", referenced from:
  vtable for Simple_windowin cc1oxcSA.o
  "typeinfo for Graph_lib::Window", referenced from:
  typeinfo for Simple_windowin cc1oxcSA.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

これが何を意味するのかわかりません。ここで回答を読みました (SO)。.o ファイルを作成しました。fltk-config を使用して Mac OS でこれをコンパイルしようとしています。

4

3 に答える 3

2

コンパイラを呼び出すとき-lの前に(ダッシュエル)があるべきだと私には思えます。または、より慣習的なものに置き換える/opt/local/lib/libfltk.aこともできます。/opt/local/lib/libfltk.a-L/opt/local/lib -lfltk

于 2011-12-31T14:43:09.817 に答える
1

次の手順を使用して、FLTK プログラム '12.3 A first example' を Linux で動作させました。

それを解凍し、Programming-code/GUI フォルダーに移動します。

  • そのフォルダーで#include <cstdlib>、ファイル std_lib_facilities.h に追加して、次のステップで atoi が宣言されていないというエラーを回避します。
  • makeProgramming-code/GUI フォルダーのコマンド ラインで実行します。これにより、ファイル libbookgui.a が作成されます。
  • プログラムの名前が Example.cpp であると仮定して、次のコマンドを実行します。

    gcc `fltk-config --use-forms --use-gl --use-images --ldflags`Example.cpp libbookgui.a

  • a.out 実行可能ファイルを実行します

于 2012-02-03T13:22:26.743 に答える
0

PDF FLTK-Tutorial.pdf にあるソース コードからサンプル プログラムを使用する

Ubuntu Linux でクリーン コンパイルを行うには、次の行を追加する必要がありました。

// 3 includes just below are not in the example but are required
// for a clean compile
#include <Fl/x.H>
#include <stdlib.h>
#include <stdio.h>

コンパイル行を正しく構成する必要があります。FLTK には、構成に役立つ fltk-config ツールがあります。

fltk-config
を実行して、fltk-config のヘルプ メッセージを取得します。出力を読んで、使用しているパッケージのコンパイル、リンク、および互換性 (gl、glut、フォームなど) のために何を入力する必要があるかを判断します。

この情報をコンパイル コマンドにコピーします。

--compile prgrname.cxxスイッチを使用して直接コンパイルすることもできます。gdb のサポートが必要なため、-g を含めます。

例えば:

fltk-config --cxxflags --ldflags

与えます(私にとって):

-I/usr/include/freetype2 -g -O2 -D_THREAD_SAFE -D_REENTRANT -Wl,-Bsymbolic-functions -lfltk

出力名と入力プログラムを追加します。

gcc -I/usr/include/freetype2 -g -O2 -D_THREAD_SAFE -D_REENTRANT -Wl,-Bsymbolic-functions -lfltk mousedrawtest.cpp mousedraw.cpp -o b.out

FLTK について学ぶことは少ないですが、気弱な人向けではありません。Erco (Greg Ercolano) のチュートリアルは優れており、多くの一般的な課題のサンプル コードです。http://seriss.com/people/erco/fltk/

http://www.fltk.org/documentation.php/doc-1.1/basics.html

他にもいくつかの優れた検索があります: FLTK チュートリアル

単純なサンプル プログラムから実際のオブジェクト指向モデルに変換する場合は、特にトップ レベル ウィンドウとその内容のスコープに注意してください。

今日、水曜日は、gdb、スコープ、および名前空間について、月曜日よりもはるかに多くのことを知っています。

于 2013-07-31T19:11:17.353 に答える