2016年5月18日水曜日

windows unistd.h 忘備録

OpenCV を Windows でコンパイルしようとしたり、何かにつけて、引っかかるので、忘備録。


ここを参照しろ。

http://d.hatena.ne.jp/tt_clown/20100602/1275457123

http://d.hatena.ne.jp/deraw/20070517/1179334643


winsock2.h を include してる部分で嵌るので、unistd.h は



#ifdef NEED_GETHOSTNAME
#ifndef _WINDOWS_
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
#endif
#pragma comment( lib, "ws2_32" )
#include <winsock2.h>
#endif

と、修正する事。

今後、コンパイルエラーで
gethostname を使用している箇所があれば、

#define NEED_GETHOSTNAME
#include <unistd.h>
#undef NEED_GETHOSTNAME

としてやれば良い。
面倒でも、こうしないと、あちこちエラーで悩まされるだろう。


3rdparth 中の zlib ライブラリの
zconf.h
ここで、Z_HAVE_UNISTD_H の定義を消す事

#ifndef ZCONF_H
#define ZCONF_H
/* #undef Z_PREFIX */
//#define Z_HAVE_UNISTD_H



ACCESS_MASK が winnt.h と、namespace cv::ACCESS_MASK でバッティングしている。
test_grfmt.cpp はテストユニットみたいなんで、コンパイルのターゲットから外してしまうか、
// using namespace cv;
のように、コメントアウトして、地道に cv::Mat みたいに namespace を付けて回るか?

以上。


補足:
 cmake-gui でエラーとか、com をコンパイルでエラーとか、全部、管理者権限が脳足りんのじゃ。


追記:

VC11とか、include dir の設定が共通化でけん。

ここを参照しろ。
http://d.hatena.ne.jp/taiyakisun/20130406/1365248215

VC11 は、こんな感じ。
よく無いって怒られる。cstdint とか、unistd.h とかを入れといたった。

<?xml version="1.0" encoding="utf-8"?> 

<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <IncludePath>$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);$(WindowsSdkDir)include;D:\Libs\cstdint</IncludePath>
    <LibraryPath>$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSDK_LibraryPath_x86);$(WindowsSdkDir)lib;</LibraryPath>
  </PropertyGroup>

</Project>
2016/07/28追記:$(WindowsSDK_IncludePath); では、SDKのパスが取れず、$(WindowsSdkDir)include を追加した。lib も同様

0 件のコメント: