macOS中编译libtiff库并在Xcode中测试
2019-10-14 本文已影响0人
向水一生
源码编译
首先从官网上下载源码,地址:http://download.osgeo.org/libtiff/,这里我使用4.0.10的版本。
解压后,配置好cmake,编译方法参考OpenCV的编译过程(https://www.cnblogs.com/you-siki/p/OpenCV4-MacOS.html),执行完sudo make install
后,注意到文件的安装位置如下图所示,头文件被安装至/usr/local/inlcude
,dylib初安装在/usr/local/lib
:
在Xcode中测试libtiff库
- 新建Xcode c++项目,这里使用Command Line Tool
-
这里为了体现一个常见的命令冲突问题,我同时使用OpenCV与libtiff库,配置好项目依赖,如下图,注意红框选择的位置与内容。这里由于同时使用两个库,要填写两个头件搜索路径:
image.png/usr/local/include
和/usr/local/include/opencv4
,二者间要有一个空格隔开。
-
找到Linked Frameworks and Libraries项,在其中引入相应的dylib。添加操作通过黄框中的加号进行。
image.png -
配置完依赖并导入dylib后,编写main.cpp,简化版的如下。
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <random>
namespace libtiff {
#include <tiffio.h>
#include <tiff.h>
}
void tiff_test()
{
libtiff::TIFF *image;
uint32_t width = 0, height = 0;
if((image = libtiff::TIFFOpen("/Users/dest/Documents/1010/brake/Tiff/brake1_height.tif", "r")) == NULL)
{
cout << "not a tiff" << endl;
exit(1);
} else {
cout << "tiff loaded" << endl;
}
libtiff::TIFFGetField(image, TIFFTAG_IMAGEWIDTH, &width);
libtiff::TIFFGetField(image, TIFFTAG_IMAGELENGTH, &height);
cout << "tiff width:" << width << endl;
cout << "tiff length:" << height << endl;
}
int main(int argc, const char * argv[]) {
tiff_test();
waitKey();
return 0;
}
注意,上述代码中tiff相关的头文件放入了namespace libtiff
中,这是因为OpenCV与libtiff的类型定义存在冲突,如果不定义libtiff的命名空间,会出现类似Typedef redefinition with different types ('int64_t(aka 'long long') vs 'long')
这样的错误信息。
上述代码正常运行的输出应与下图类似:
image.png