問題タブ [linker-errors]

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.

0 投票する
3 に答える
1053 参照

c++ - ポインターのリンカ エラー

文字列をTolkinizeするプログラムを作成しようとしています (文字列クラスを使用せずにこれを実行しようとしています - ポインターと文字がどのように機能するかについて詳しく知るために) - 動作すると思われるプログラムを作成しました (任意のプログラムをコンパイルしようとすると、次のランダムなエラーが発生します。

エラー 1 エラー LNK2019: 未解決の外部シンボル "public: char * __thiscall Tokenize::next(void)" (?next@Tokenize@@QAEPADXZ) が関数 _main ドライバーで参照されています

エラー 2 エラー LNK2019: 未解決の外部シンボル "public: __thiscall Tokenize::Tokenize(char const * const,char)" (??0Tokenize@@QAE@QBDD@Z) 関数 _main ドライバーで参照

エラー 3 致命的なエラー LNK1120: 2 つの未解決の外部 C:\Users\Simmons 2.0\Documents\School\CS1410\project 5\Token\Debug\Token.exe

私はこのコードを数人の友人にコードを見せましたが、誰も何が起こっているのか、または私が間違っているのかを理解できませんでした...

注: VS 2008 Express Edition を実行しています - Windows 7 x64


メイン.cpp


tokenize.h


tokenize.cpp

私のテスト(行をコメントアウト)から、エラーの1つはtokinze.next()

0 投票する
3 に答える
3543 参照

c++ - リンク時の多数の std:: 関数の複数定義

外部コードをアプリケーションに統合しようとしています。私のコードは純粋な C でしたが、新しいコードは C++ であるため、C ファイルの名前を .cc に変更し、すべてを g++ でコンパイルしました。

正常にコンパイルされますが、リンク エラーが大量に発生します。

私は Cmake を使用してビルドしていますが、それほど複雑なことはありません。私のコードは単なるメソッドの集まりであり(stdパッケージから何も使用していません)、統合しようとするコードはそれほど複雑ではないため、なぜこれらすべてのエラーが発生するのかわかりません。

警告は、(まだ) 新しい C++ コードからではなく、自分のコードをリンクすることで発生することに注意してください。

誰か?

編集: 統合しようとする外部コードを掘り下げた後、いくつかのインクルードが見つかりました:

また、iostream は他のヘッダーにも含まれており、それらすべてにインクルード ガードがあります。

更新:外部コードを少しきれいにして、不要な依存関係を削除することができました。まだいくつかのリンカ エラーがありますが、はるかに少ないです:

コードには と の両方が含まれてcmathおりcstdlib、デフォルトの名前空間を使用して abs およびその他の関数を参照しています。これが問題でしょうか?

0 投票する
2 に答える
2277 参照

c++ - gdLibrary (libgd) を MS Visual C++ (2008 Express Edition など) で使用/リンクするには? LNK2019 エラーの取得

MS Windows XP Prof. SP3 32bit の C++ アプリでgdLibrary ( http://www.libgd.org ) を使用する必要があります。MS VC++ 200x EE で libgd を使用している人はいますか?

私の問題: MS Visual C++ でコンパイルする必要があります(: 2008 Express Edition - サード パーティの状態を修正)...しかし、現在、リンカがクラッシュし、次のLNK2019エラーのうち 11 個が発生します:

リンク中... codereate.obj : エラー LNK2019: 未定義の外部シンボル "_gdImageDestroy" が "public: virtual __thiscall CodeCreate::~CodeCreate(void)" で見つかりました

他のsmybolsは_gdImageColorExact_gdImageCopyResizedおよび他のいくつかのgd関数です。bgd.libからダウンロードしたパッケージが提供するでは、VC++ リンカが正しく動作しないようhttp://www.libgd.org/releases/gd-latest-win32.zipです。

私がしたこと/試したこと:

  1. に抽出さgd-latest-win32.zipc:\users\johndoe\cpp\libgdます。
  2. c:\users\johndoe\cpp\libgd\lib追加ライブラリ dir の定義(グローバル VC++ 設定)
  3. c:\users\johndoe\cpp\libgd\include追加インクルード dir として定義(グローバル VC++ 設定)
  4. c:\users\johndoe\cpp\libgd\include\lib\bgd.lib追加のlinker\input依存関係として定義(プロジェクト設定)
  5. 私はセーブ側にいることさえ#pragma comment(lib, "libgd.lib")自分に追加しました。codecreate.h

助言がありますか?何が間違っていますか (たとえば、何かをインストールするのを忘れたなど)? VC++ 2008 と互換性を持たせるための「トリック」はありますbgd.libか?

その他の注意事項:

  1. Linux/g++ で実行すると、すべて正常に動作し、警告は表示されません-pedantic -ansi -wAll。プログラムはその仕事を行い、いくつかのバーコードを生成します。
  2. Win32 用のDevC++ を使用する場合に機能します。したがって、これは Windows の問題ではなく、「単なる」VC++ の問題です。DevC++ の場合、次のことを行いました。
    • ダウンロードしたばかりでhttp://www.libgd.org/releases/gd-latest-win32.zip
    • に抽出しましたc:\users\johndoe\cpp\libgd
    • c:\users\johndoe\cpp\libgd\lib\bgd.liblinker-projects 設定で追加のオブジェクトとして追加されました。
    • 定義されたc:\users\johndoe\cpp\libgd\libals 追加のライブラリ dir、
    • c:\users\johndoe\cpp\libgd\include追加インクルードディレクトリとして定義
    • いくつかのバーコードに満足
  3. うまく動かなかったら大変なことになってます…今は必死になってます(-_-;)
0 投票する
1 に答える
21112 参照

c++ - 静的ライブラリをリンクする際のインライン関数の複数定義

mingw (Windows 用 gcc) でコンパイルする C++ プログラムがあります。gcc 4.4.1 を含む mingw の TDM リリースを使用します。実行可能ファイルは、2 つの静的ライブラリ (.a) ファイルにリンクしています。そのうちの 1 つは C で記述されたサードパーティ ライブラリです。もう 1 つは、私が作成した C++ ライブラリで、C ライブラリを使用して独自の C++ API を提供します。

C ライブラリの機能の (私の見解では、過度の) 一部がインライン関数で実装されています。C ライブラリの API を使用するときにインライン関数を含めることは避けられませんが、すべてをリンクしようとすると、すべてのインライン関数の複数の定義があるというリンク エラーが発生します。私のC++ラッパーライブラリと私が持っていないライブラリで呼び出された場合、基本的にヘッダーでインラインで定義されたものはすべて、CライブラリとC++ライブラリの両方で作成された関数を取得しています.

インクルード ファイルが同じプロジェクト内の異なる .c または .cpp ファイルで複数回使用されている場合、複数の定義エラーは発生しません。問題は、ライブラリごとに 1 つの定義が生成されることだけです。

コンパイラが両方のライブラリでこれらのインライン関数の関数とシンボルを生成する方法/理由は? コードでそれらの生成を強制的に停止するにはどうすればよいですか? .a ファイルから重複した関数を削除するために実行できるツール、またはリンカーに複数の定義を無視させる方法はありますか?

(参考までに、サードパーティのライブラリには、すべてのヘッダーに #ifdef __cplusplus および extern "C" ガードが含まれています。とにかく、それが問題である場合、シンボルの複数定義は発生しません。シンボルが定義されていないか、少なくとも異なります。)

特に、サード パーティの C ライブラリの DLL にリンクすると、リンク エラーは発生しません。ただし、DLLから呼び出す必要がある独自のバージョンの関数を持つコードに関係しているように見える奇妙なランタイムエラーが発生します。(あたかもコンパイラが私が求めていない関数のローカル バージョンを作成しているかのように。)

この質問の同様のバージョンが以前に尋ねられましたが、これらのいずれにおいても私の状況に対する答えが見つかりませんでした:

この質問に対する答えは、ポスターが変数を複数定義しているということでした。私の問題は、インライン関数の複数の定義です: 複数の cpps に同じヘッダーを含めることによる複数の定義エラーの繰り返し

これは MSVC プログラムでしたが、mingw を使用しています。また、この質問でのポスターの問題は、ヘッダー内のクラス本体の外側にある C++ クラス コンストラクターの定義でしたが、私の問題はインラインの C 関数にあります: Static Lib Multiple Definition Problem

この愚か者はすべての C コードの名前を C++ ファイルに変更しましたが、彼の C コードは C++ セーフではありませんでした: リンク時に多数の std:: 関数を複数定義する

これは、1 つの定義ルールに違反してもエラーにならない理由を知りたいだけでした: 定義が異なるインライン関数の予測できない動作

0 投票する
3 に答える
4383 参照

c++ - リリースビルドのみでの膨大な量のリンカーの問題

誰かがこれについて考えを持っていますか?リンカのエラーは、私の操舵室、特にこのようなものからは程遠いものです。

含めるべき情報は他にありますか?

0 投票する
4 に答える
7258 参照

c++ - LibSerial への未定義の参照

それで、私はシリアル送信プログラムを書いていて、C++ を使用するように切り替えたばかりです。C++ を使用してからしばらく経ちました (最近は C を使用しており、その前は Java を使用していました)。

今度は LibSerial を使用する必要があります (C の termios よりも使いやすいようです)。

私のコードは次のとおりです。

出力をコンパイルすると:

0 投票する
4 に答える
2049 参照

c++ - リンカがアプリケーションのリンクに失敗します(XXXXはXXXX.objですでに定義されています)

アプリケーションをビルドしようとすると、リンカーは次のようなエラーを大量に発生させます。

modlauch.obj:エラーLNK2005: "public:virtual __thiscall lolbutton ::〜lolbutton(void)"(?? 1lolbutton @@ UAE @ XZ)はすでにlolbutton.objで定義されています

コンパイラの設定ミスと関係があるのではないかと思いますが、修正方法がわかりません。私のクラスは一度しか含まれていないので、コードとは何の関係もないと思います。プロジェクトの再構築とクリーニングを試みましたが、役に立ちませんでした。

誰かがこの問題の解決策を提案できますか?私のプラットフォームはWin32(C ++)で、 MFCを使用しています。

0 投票する
6 に答える
4901 参照

c++ - VS2008: 異なるフォルダーに同じ名前の 2 つの CPP ファイルがあるプロジェクトをビルドできますか?

ここに私のフォルダ構造があります:

プロジェクトをビルドすると、一部のシンボルが定義されていないというリンク エラー (LNK2028: 未解決のトークンなど) が表示されます。すべてのシンボルが定義されていること、および宣言されたすべての関数に対応する定義があることを確認しました。

utility.cppプロジェクトをコンパイルすると、両方のフォルダーのファイルがutility.obj出力フォルダーで同じものにコンパイルされるような気がします。その結果、一方が他方を上書きします。

  1. これは予想される動作ですか?
  2. 同じ名前の 2 つのファイル (異なるフォルダーにあります) を持つ C++ バイナリをビルドするにはどうすればよいですか?
0 投票する
2 に答える
2472 参照

c++ - 演算子オーバーロード関数に関する C++ リンカ エラー

タイプ Node のリストがあります。次のように、リストの先頭にあるノードと等しい一時的なノードを設定します。

しかし、リンカーエラーが発生し続けます:

リンク中...
main.obj : エラー LNK2019: 未解決の外部シンボル "public: class Node & __thiscall Node::operator=(class Node const &)" (??4Node@@QAEAAV0@ABV0@@Z) 関数で参照" void __cdecl fillScan(int,class std::list >)" (?fillScan@@@YAXHV?$list@VNode@@V?$allocator@VNode@@@std@@@std@@@Z)
C:\Users \Aaron McKellar\Documents\School Stuff\CS445\Test\Debug\Test.exe: 致命的なエラー LNK1120: 1 つの未解決の外部

前もって感謝します!

0 投票する
1 に答える
2600 参照

linux - Linux FreeBSD 共有オブジェクトの問題

Linux上に構築された共有オブジェクト「share.so」にリンクするfreebsd用のアプリケーションを構築しようとしています。また、/usr/compat/linux/lib の下に Linux 互換ライブラリの freebsd があります。アプリケーションをコンパイルできます。しかし、「share.so」にリンクしているときに、「/usr/compat/linux/lib」の下のライブラリにアクセスする必要があるshare.so(Linux上に構築)が必要なため、大量のエラーが発生します。/usr/lib/ の代わりに compat linux ディレクトリを調べるように share.so に指示する方法はありますか?

これらは私が受け取っている警告です。これらのバージョンは compat/linux/lib で入手できますが、/usr/lib には下位バージョンが含まれています。ここでsharedlib.soは、Linuxで生成された.soファイルです