こんにちは
ue4のc++プロジェクトで、機械学習ライブラリ「dlib」を使用したいと考えています。
今回使おうと思ったdlibの機能は、プロジェクトにsource.cppを追加しなければリンカエラーが出てしまうものです。
しかし、プロジェクトにsource.cppを追加してもリンカエラーが出てしまいます。
原因がわかる方はいますか?
こんにちは
ue4のc++プロジェクトで、機械学習ライブラリ「dlib」を使用したいと考えています。
今回使おうと思ったdlibの機能は、プロジェクトにsource.cppを追加しなければリンカエラーが出てしまうものです。
しかし、プロジェクトにsource.cppを追加してもリンカエラーが出てしまいます。
原因がわかる方はいますか?
dlibというライブラリがどういうものかよくわかっていないのですが、どのような手順でプロジェクトに追加されたものなのか情報がなければこれ以上の解答は難しいです。
通常ライブラリを使用する場合には多くの場合はプラグインを作成します。プラグインを作成する方法は公式のドキュメントにもありますが、おそらくこれだけでは足りません。
スタティックライブラリを使いたい場合には少々複雑な手順が必要となりますので、以下のブログ記事が参考になりそうです。
http://simplestar-tech.hatenablog.com/entry/2016/07/03/174651
もしこれらをしっかり読んでみてもわからないということであれば再度ご質問ください。
失礼しました。
私が使おうと思っているdlibは基本的にヘッダオンリーなライブラリです。
しかし、一部のヘッダファイルは付属のsource.cppというファイルをプロジェクトに追加する必要があると公式ドキュメントに書いて有るため、追加しました。
本来ならこれでビルドできるはずなのですが、リンクエラーが出ます。
エラー文:USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives_は未解決
ライブラリの導入手順
vsプロジェクトのBuild.csにPrivateIncludePaths.Addでインクルードディレクトリのアドレスを追加
プロジェクトにsource.cppを追加
#define ENABLE_ASSERTS をdlibのヘッダをインクルードする前に追加
スタチックライブラリは今回使っていないので、2番めのサイトは読んでいません。
プラグインの作成は読んでみましたがよくわかりませんでした。
今回のような場合はプラグインを作成したほうが良いのでしょうか?
なるほど、ヘッダオンリーであれば、プラグイン作成までは必要なさそうです。
source.cppはあくまでも手動で追加したのでしょうか?UE4で追加ソースファイルを必要とする場合には、UE4エディターを起動した状態で、『新規C++ファイルを追加する』から追加するのが適した手順です。
ここからC++ファイルを追加し、空のC++クラスを作成し、仰っている追加インクルードディレクトリの設定を行えば可能なはずです。
ENABLE_ASSERTSはVSを使用した場合には自動的に有効になると書かれているので、ここでは必要なさそうです。
お早い回答ありがとうございます。
エディタ側より追加すればよいのですね。
これは新規でしか追加できないのでしょうか?
というのも、source.cppの中身は別のソースファイルをインクルードしているものみたいだからです。
新規ファイルにsource.cppの内容をコピペしても、相対パスでファイルをインクルードしているためおそらくエラーがでると思われます。
また、新規ファイル内でsource.cppをインクルードすることは禁じられているようです。
既存のコードを追加する方法はないでしょうか?
既存のファイルを追加する場合は、Source/MyProjectのフォルダー以下にcppファイルとヘッダーファイルを配置した状態で、エディター内メニューで"Visual Studioプロジェクトを更新"するか、".uproject"ファイルをエクスプローラー上で右クリックしてから、"Generate Visual Studio Project Files"を選択することで、プロジェクト上に追加された状態で認識されます。
もちろんその場合でもヘッダーなどが正しくインクルードされていない場合にはエラーになると思いますので、注意してください。
上記の通り、source.cppには相対パスでファイルをインクルードしている部分があり、source.cppを単体でSource/MyProject以下に移すことができません。
かといって、dlib内のファイルをすべてSource/MyProject以下に移すのも頭が悪いように思います。
source.cppの内容より、必要なソースファイルのみを抜き出す必要があるのでしょうか?
もしくは、Source/MyProject以下のファイル以外もコンパイルする方法などはないでしょうか?
わかりました。
長々とお付き合い頂きありがとうございました<(_ _)>
はい、申し訳ありませんが、そうなってしまいます。
現状ではSourceフォルダーに以下にあることがおそらく必須となります。Source以下にしたくないのであれば、Pluginという手もあります。ただやることはほとんど変わらないので、結局相対パス部分を修正する必要はあるかと思います。