問題タブ [undefined-reference]
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 - 未定義の参照、gmp lib
インストーラーを介してcygwinにgmpライブラリをインストールしました。gccで簡単なプログラムをコンパイルしてみました。
しかし、私はこれを手に入れました:
非標準ライブラリを使おうとするのはこれが初めてで、ここで混乱しています。私のコンパイラはCygwinに設定されており、すべてのインストール部分を実行しました。何が間違っているのかについてのアイデアはありますか?ありがとうございました。
c++ - 未定義の参照C++
Javaから変換している最初の正当なプログラムをコンパイルしようとしています(テストhello worldタイププログラムを実行してコンパイラをチェックしましたが、動作します)。3つのファイルがあります:
main.cpp
skewNormal.cpp
skewNormal.h
コンパイルすると、次のエラーが発生しました。
Ubuntu10.10でCode::Blocksを使用しています。
c++ - 関数への未定義の参照
Linuxを使用していて、次のファイルがあります。
関数F1()
はで宣言されfileB.h
、で定義されていfileB.cpp
ます。で関数を使用する必要があるため、関数をfileA.c
次のように宣言しました
でfileA.c
。
ただし、コンパイル中にエラーが発生しました
なにが問題ですか?
ありがとうございました。
ETA:受け取った回答のおかげで、次のようになりました。
fileA.hには、
fileA.cには、
fileB.hには、
fileB.cppには、
しかし、私は今エラーがあります
c++ - 複数の定義[...]最初にここで定義
私はH264パーサー(OOなし)を書いていますが、いくつかのモジュールを使用して物事をより適切に整理しようとしています。
私はこの問題を抱えています:
私のシナリオは次のとおりです。
macroblocktypes.h。定義するだけで
macroblocktables.h:
macroblocktables.cpp。配列と関数は、.hファイルの配列と関数ごとにこのように定義されています。
そして最後に私のh.264ファイル(.cppと.h)。.hにはmacroblocktable.hとmacroblocktype.hを含め、h.264.cppにはh.264.hだけを含めます。
h.264.cppのmacroblocktable.cppの関数を使用したいと思います。
前もって感謝します
load - コンパイルはできるがトップレベルに対応しない Ocaml コード
フリーコースの練習をしています。次の ocaml コードは、「make」するとコンパイルされますが、トップレベルに配置しようとすると問題が発生します。なんで?
しかし、このコードを(emacsから)トップレベルに「cc ce」すると、エラーが発生します
次に、このエラー情報で、私は説明を得ました
http://caml.inria.fr/pub/docs/manual-ocaml/manual023.html
つまり、
未定義のグローバル mod への参照 #load を使用してモジュールの実装をメモリにロードすることを怠っています。
したがって、私はやろうとしています: #load "localizing.cmo". しかし、問題は、localizing.cmo がないことです。これが検索結果です。
ここに makefile を入れるのをためらっていますが、問題の原因は「Makefile」にあるべきではありません。また、コースのサイトで提供されているため、makefile を変更することは想定されていません。
どうしたの??ありがとうございました。すべての ocaml プログラムがトップレベルで実行できるとは限らないという結論を下すのは正しいでしょうか?
c++ - C-関数テンプレートへのコールバック:テンプレートを明示的にインスタンス化する
前提
次のインターフェイスを提供するCライブラリ(C ++から)を使用しています。
問題
ここで、関数テンプレートをコールバックとして登録する必要がありますが、これにより問題が発生します。次のコードを検討してください。
これにより、次のリンカーエラーが発生します(OSXではg++(GCC)4.5.1を使用しますが、コンパイラバージョン/プラットフォームの他のほとんどの組み合わせで機能します)。
アーキテクチャx86_64の未定義のシンボル:
私はそれを理解できると思います。
最初の「ソリューション」</h2>
これは、テンプレートを明示的にインスタンス化することで簡単に修正できます。
残念ながら、コールバックは関数テンプレート内に登録されているため、これは実際のコードには適用できません。また、この関数が呼び出されるテンプレート引数のセットがわからないため、すべての明示的なインスタンス化を提供できません。それら(私はライブラリをプログラミングしています)。したがって、私の実際のコードは次のようになります。
2番目の「ソリューション」</h2>
関数テンプレートは、関数を呼び出すことによって暗黙的にインスタンス化されます。それではそれを実行しましょう。ただし、呼び出しが実際に実行されていないことを確認してください(関数には副作用があります)。
これは、最適化が有効になっている場合でも機能するようです(コンパイラーによってデッドブランチが削除されるように)。しかし、これがいつか故障しないかどうかはわかりません。また、これは非常に醜い解決策であり、将来のメンテナがこの明らかに不要なコードを削除しないように、長さの説明コメントが必要です。
質問
テンプレート引数がわからないテンプレートをインスタンス化するにはどうすればよいですか?この質問は明らかにナンセンスです:私はできません。–しかし、これを回避するための卑劣な方法はありますか?
それを除けば、私の回避策は成功することが保証されていますか?
ボーナス質問
このコード(具体的には、関数ポインターをにキャストしたという事実void*
)でも、次の警告が生成されます。
ISO C ++は、関数へのポインタとオブジェクトへのポインタ間のキャストを禁止しています
でコンパイルするとき-pedantic
。ライブラリ用に強く型付けされたCラッパーを記述せずに(私の状況では不可能です)、どういうわけか警告を取り除くことができますか?
ideoneでコードを実行する(コンパイルするためのキャストが追加されています)
c++ - 単純なクラスをライブラリに追加するときに未定義の参照エラーが発生する
コンパイル/リンクに CMake を使用するかなり大きなライブラリを使用しています。いくつかの機能を追加する必要があるため、いくつかのクラスをライブラリに追加する必要があります。問題は、単純な helloWorld クラスをライブラリに追加して、メイン関数から呼び出そうとすると、リンク時に未定義の参照の問題が発生することです。ビルドされたコード (ライブラリ フォルダー内の "CMakeFiles") を調べたところ、私のクラスは CMake によってコンパイルされていません (したがって、たとえば、そこに HelloWorld.o ファイルはありません)。
誰かが私が間違っているところを指摘できますか? このクラスをコンパイルするように CMake に明示的に指示する必要がありますか? (はいの場合、どのように?)。私はCMakeの初心者なので、この問題に取り組む方法がわかりません。
このように関数を呼び出します。``
エラーメッセージは、次のようなものです。
d - D2gdcリンクエラー-`_D3std6stdint12__ModuleInfoZ`への未定義の参照
https://bitbucket.org/goshawk/gdc/downloads/gcc-4.5.2-tdm-1-gdc-r575-20110723.zipとTDMGCC4.5.2を-v2モードで使用してDLLをビルドしています。モジュールの1つで私はしますimport std.stdint
。だから私はこれを修正するためにlibgphobos2に対してリンクする必要があると思いましたが、それは私にさらに多くのエラーを与えます:
これはバグですか、それともgdcに追加のフラグを渡す必要がありますか?
c++ - G++Cppの「未定義の参照」
エラーを解消することができないようです。エラーは以下のとおりです。私はグーグルを見ましたが、それでも理解できません。私がCppを初めて使用するわけではありませんが、しばらくの間、Cppにだまされていません。
奇妙なことに、WindowsのG++で動作しました...
エラー:
- [ze @ fed0r!---- ** _ _ * ] $ g ++ main.cpp
- /tmp/ccJL2ZHE.o:関数 `main'内:
- main.cpp:(。text + 0x11): `Help :: Help()'への未定義の参照
- main.cpp:(。text+0x1d): `Help :: sayName()'への未定義の参照
- main.cpp:(。text+0x2e): `Help ::〜Help()'への未定義の参照
- main.cpp:(。text+0x46): `Help ::〜Help()'への未定義の参照
- collect2:ldが1つの終了ステータスを返しました
main.cpp
Help.h
Help.cpp
c++ - Libc++ 未定義参照を使用して Clang でコンパイルする
最初のカップルは長すぎて参照できません。clang++ -stdlib=libc++ ../main.cc ...
SVN から clang と libc++ でコンパイルしようとすると、このエラーが発生します。
解決策:答えの1つのおかげで、私は解決策を知っています。libc++は、 libstdc++ のように単独で使用することはできません。 libc++abiと一緒にリンクする必要があります。ただし、libc++abi はまだ完成していないので、libc++ を使用するのは今のところ少し不完全なようですが、完成したときはまだ最初の選択肢です。
2012 年 5 月 26 日更新: C++ 用の libc++abi が完成し、次のように clang++ を正常に使用していますclang++ -std=c++11 -stdlib=libc++ -lc++abi
。