0

静的ライブラリであり、サードパーティのライブラリLib3を使用するプロジェクトLibAがあります。Project LibA は問題なくビルドおよび実行されます。

実行可能ファイルであり、LibA を使用する別のプロジェクト Exe があります。これはコンパイルされますが、リンカは LibA でのみ使用される Lib3 の関数を検出しません。

私が試したこと:

  • プロジェクトExeのライブラリディレクトリパスにLib3の場所を追加します(Lib3がLibAで参照されるのと同じ方法です)
  • リンカーの追加ライブラリ ディレクトリに Lib3 の場所を追加する
  • Lib3 *.lib ファイルをプロジェクト LibA の出力フォルダーにコピーします (したがって、LibA *.lib ファイルが含まれます)。

私が何をしようとしても、私はまだ得LNK2019: Unresolved external symbolます。LibA で実際に Lib3 を呼び出すコードを削除した場合にのみ、プロジェクト Exe を適切にコンパイルおよびリンクできます。

静的ライブラリの依存関係を正しく処理するには?

編集:明確にするためのいくつかのコード:

LibA には LibA.h と LibA.cpp が含まれています。

LibA.h:

class LibA {
    void doSomething();
}

libA.cpp:

#include "LibA.h"
#include "Lib3.h"

void LibA::doSomething() {
    //call stuff in Lib3.h
}

Exe.cpp:

#include "LibA.h"

int _tmain(int argc, _TCHAR* argv[])
{
   LibA a = new LibA();
   a.doSomething();
}
4

1 に答える 1

0

Visual Studio を使用しdumpbinて、必要な関数が lib3.lib にエクスポートされているかどうかを確認してください。そうでない場合は、lib3.hwith__declspec(dllexport)で関数を宣言して、ライブラリにリンクしようとする他のモジュールから見えるようにする必要があります。

于 2013-03-28T13:34:08.147 に答える