2016-05-13 7 views
0

これは基本的な質問ですが、このトピックに関する適切な投稿が見つからないか、正しく検索していないかもしれません...他のサードパーティのCライブラリを含むC++プロジェクト_Aを別のプロジェクトにリンクする方法B

2つの異なるソリューションで2つのプロジェクトがあります。プロジェクトAは、ffmpeg(ネイティブC)のようなサードパーティのライブラリを使用するアプリケーション(.exe)であり、プロジェクトBはプロジェクトAのコードを使用したいDLLです(目的:AC#プロジェクトはプロジェクトAのfunktionality B)。 私の視点からは、プロジェクトAのインクルードファイルをインクルードし、プロジェクトB .objへのリンカ入力を設定するために、インクルードパスをプロジェクトAに追加するだけです。 しかし、プロジェクトB MSVSをコンパイルするときには、ffmpegのヘッダの「/ opt.h libavutil」ヘッダファイルを見つけることができません。

#pragma once 
extern "C" 
{ 
#include <libavutil/opt.h> 
#include <libavcodec/avcodec.h> 
#include <libavutil/channel_layout.h> 
#include <libavutil/common.h> 
#include <libavutil/imgutils.h> 
#include <libavutil/mathematics.h> 
#include <libavutil/samplefmt.h> 
} 

fatal error C1083: Cannot open include file: 'libavutil/opt.h': No such file or directory. 

は、私は本当にそれらのffmpeg LIBSへのパスを含める設定する必要がありますか? そうすると、多くのLNK2001、2005、2019のエラーが発生します。 すべてのアイデア?

+0

libavutil/opt.hを探すディレクトリを教えてください。どのようなコンパイラを使用しているかによって異なります – xaxxon

答えて

1

申し訳ありません、あなたのプロジェクトのインクルードパスを設定する方法はありません。可能であれば、この作業を容易にするかもしれませんが、hereをご覧ください。

プロジェクトBがプロジェクトAのコードを使用している場合は、すべてのコードをプロジェクトBに移動し、プロジェクトAにもDLLを使用させたい場合があります。インクルードパスを設定するよりもEXEプロジェクトをDLLにする方が簡単な場合は、AとBの役割を切り替えて名前を変更し、タイプを適切に変更してコードを移動するではなく、がプロジェクトB、 Project AをDLLとして使用します。

編集(あなたのコメントに応答して):

  • プロジェクトDLL:
    はffmpegのへの結合を含む、C++のexeファイルとC#のexeファイル間で共有されるすべてのコードを受け取り、など
  • プロジェクトC++ EXE:
    以前のプロジェクトA.の残りの部分を受け取ります。プロジェクトDLL(より正確には、そこから出力されたDLL)を使用して、以前に直接組み込まれたものを再度取得します。
  • プロジェクトC#EXE: 以前と同じように。もちろん、マネージコードとアンマネージコードのマーシャリングはすべて残っています(とにかくこれをやる必要があります)。
+0

私はC++を呼び出せる限り再設計に問題はありません関数は、C#プロジェクトのffmpegライブラリを実装しています。どのような構造をお勧めしますか? – Richard

+0

@リチャード私は応答に命題を入れました。 – Aconcagua

関連する問題