問題タブ [gcc5]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++11 - 特定の gtk::builder 関数 add_from_file への gtkmm 未定義参照
私はEclipse、mingw-w64、gtkmm2.4、gladeを使用して簡単なプログラムをコンパイルしています。
チュートリアルに従って、hello world gtkmm の例をコンパイルできますが、空き地になると、少し奇妙な未定義エラーが発生しました。
gtkmm 2.24 の簡単なサンプル チュートリアルである、コンパイルしてスムーズに実行されるプログラムhttps://developer.gnome.org/gtkmm-tutorial/2.24/sec-basics-simple-example.html.en
しかし、空き地の章(24.2.1)から別の簡単な例を実行しようとすると、うまくいきません。
https://developer.gnome.org/gtkmm-tutorial/2.24/sec-builder-accessing-widgets.html.en 例:
コンパイルすると、次のようなエラーが発生しました
test.cpp:(.text.startup+0x281): undefined reference to Gtk::Builder::add_from_file(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
引数「something.glade」をタイプとして取るようですstd::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&(これが何であるかはわかりません)。
gtkmm マニュアル (https:developer.gnome.org/gtkmm/stable/classGtk_1_1Builder.html#aa3f4af4e7eaf7861c8283dc0dbd5254c) によると、それはGtk::Builder::add_from_file(const std::string & filename). では、引数の型が本当に問題なのでしょうか?
std::string()orを実行して std::string としてキャストしようとしstring()ましたが、同じエラーが発生しました。
問題の行をコメントアウトしてみましたが、問題なくコンパイルされました。
Gtk::Builder::create()コンパイル エラーへの未定義の参照を受け取りませんでしたrefBuilder->get_widget("window1", window);コンパイル エラーへの未定義の参照を受け取りませんでした
だから今、私はこの些細な問題に頭を悩ませています。助けてください。
詳細については
pkg-config --cflags --libsyielded-IE:/gtkmm64/include/gtkmm-2.4 -IE:/gtkmm64/lib/gtkmm-2.4/include -IE:/gtkmm64/include/atkmm-1.6 -IE:/gtkmm64/include/giomm-2.4 -IE:/gtkmm64/lib/giomm-2.4/include -IE:/gtkmm64/include/pangomm-1.4 -IE:/gtkmm64/lib/pangomm-1.4/include -IE:/gtkmm64/include/gtk-2.0 -IE:/gtkmm64/include/gdkmm-2.4 -IE:/gtkmm64/lib/gdkmm-2.4/include -IE:/gtkmm64/include/atk-1.0 -IE:/gtkmm64/include/glibmm-2.4 -IE:/gtkmm64/lib/glibmm-2.4/include -IE:/gtkmm64/include/glib-2.0 -IE:/gtkmm64/lib/glib-2.0/include -IE:/gtkmm64/include/sigc++-2.0 -IE:/gtkmm64/lib/sigc++-2.0/include -IE:/gtkmm64/include/cairomm-1.0 -IE:/gtkmm64/lib/cairomm-1.0/include -IE:/gtkmm64/include/pango-1.0 -IE:/gtkmm64/include/cairo -IE:/gtkmm64/include -IE:/gtkmm64/include/freetype2 -IE:/gtkmm64/include/libpng14 -IE:/gtkmm64/lib/gtk-2.0/include -IE:/gtkmm64/include/gdk-pixbuf-2.0 -LE:/gtkmm64/lib -lgtkmm-2.4 -latkmm-1.6 -lgdkmm-2.4 -lgiomm-2.4 -lpangomm-1.4 -lgtk-win32-2.0 -lglibmm-2.4 -lcairomm-1.0 -lsigc-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lpng14 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl、プロジェクトに含めましたpkg-config --modversion gtkmm2.42.22.0 が得られたので、add_from_file() の 2.14 要件と関係があるとは思えませんpkg-config --modversion gtk+2.02.22.0が得られました- のようなフラグは使用しませんでした
--std=c++xx。 - ウィンドウズ8 64ビット
c++ - ループの前に const& スカラー値を const に代入すると役立つのはなぜですか?
GCC 5.4.0stl_algobase.hには次のものがあります。
スカラーのバリアントが一般的なバリアントよりも優れている理由がわかりません。つまり、それらはまったく同じものにコンパイルされませんか? スタックからレジスタにロード__valueし、ループ全体でそのレジスタを使用しますか?
gcc - 「-march」と命令セット スイッチの間に競合はありますか?
次のコマンドを使用してサンプル プログラムをコンパイルしています。
質問:
- MMX、SSE4、および 3DNow を有効にするためのスイッチについて、GCC が不平を言わないのはなぜですか。選択したアーキテクチャ i386 と互換性がありませんか?
- コンパイラは、i386 で実行できない実行可能ファイルを生成しますか?
c - C switch ステートメントまたは gcc バグの誤解?
次のコードは、GCC 4.4.7 および LLVM 6.1 でコンパイルすると正しく実行されるようです。それでも、gcc バージョン 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) で正しくコンパイルされるとは思いません。
以下は、私が問題を減らしたものです。
これを次のようにコンパイルすると: gcc -O0 -g -Wall -Werror sillyswitch.c -o sillyswitch
印刷します
これは私がそれが印刷することを期待しているものです
ただし、これを次のようにコンパイルすると: gcc -O -g -Wall -Werror sillyswitch.c -o sillyswitch
印刷します
これは私が期待するものではありません。
最適化がオンになっているときに期待どおりに機能しない理由はわかりません。2 番目のループで取られた switch ステートメントの分岐が任意であるという点で、コードは間違っていますか? Cなので何とか足を撃ちましたか?
完全な出力に失敗しました:
成功の完全な出力:
c++ - GCC 6.2.0 での CXX11 未定義参照
Scientific Linux マシンに GCC 6.2.0 を手動でインストールしました。C++ アプリケーションのコンパイルは問題ないように見えますがundefined references、リンク時に CXX11 に大量のエラーが発生します
二重 ABIの問題は認識していますが、コンパイルし-D_GLIBCXX_USE_CXX11_ABI=0ても違いはありません。他にどのようなオプションがありますか?
アップデート
CMAKE の構成は次のとおりです。
これはのコンパイル行ですfile.cpp
およびリンク(実際に失敗する場所)
また、MPICH 3.2 は新しいコンパイラ (gcc 6.2.0) でビルドされています。
gcc - wxWidgets 非推奨のコンストラクター
wxWidgets 3.0 ライブラリを使用して次のコードをコンパイルしようとしています。
foo.h
foo.cpp
ファイルwx/menuitem.h コードで定義されたコンストラクター:
gcc 5.4.0、Ubuntu 16.04 x86_64 でコンパイル:
どうすれば修正できますか?
c++ - エラー:「log2」は「std」のメンバーではありません
ここで何を見ているのかわかりません。以下のテスト結果は、OS X 10.5.8 を実行している古い PowerMac G5 からのものです。ビッグ エンディアンの PowerPC CPU でのテスト用にまだ使用されています。コンパイラは GCC 5.4 で、MacPorts によって提供されます。
テストプログラムは以下です。コンパイルするとエラーになりますerror: 'log2' is not a member of 'std'。
Is std::log2() an extension or C++ standard?によると 、利用可能でstd::log2ある必要があります。
プログラムがコンパイルに失敗するのはなぜですか?
これは、古いハードウェアが原因である可能性があります: C++11 cmath 関数は、Android NDK w/gcc-4.8 または clang 3.4 の std 名前空間にありません。Android は別のプラットフォームだと認識しています。
MacPorts イシュー トラッカーで開く:問題 53226: PowerMac、GCC 5.4 および "エラー: 'std::log2' は宣言されていません" .
GCC イシュー トラッカーで開く:問題 79017: 古い PowerMac G5、MacPorts GCC 5.4、C++11、および「std::log2 は宣言されていません」