我按照说明here从头开始安装clang
。之后,我根据说明here使用libc++
安装了libsupc++
。
现在,每当我编译&将程序与clang
和libc++
相关联,我需要发出如下命令:
clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib <...>
有没有办法以默认使用libc++
的方式配置/编译clang,而不必每次都在命令行上指定库和/或路径?将它放入LD_LIBRARY_PATH
也不是首选,也不是使用自定义包装脚本。
答案 0 :(得分:10)
Clang的CMake构建系统学会了#include <opencv2/opencv.hpp>
using namespace cv;
int main(int, char**)
{
// Load grayscale image
Mat1b img = imread("path_to_image", IMREAD_GRAYSCALE);
// Get all contours in the image
vector<vector<Point>> contours;
findContours(img.clone(), contours, CV_RETR_LIST, CHAIN_APPROX_NONE);
// Draw all contours in green on a black image
Mat3b rec(img.rows, img.cols, Vec3b(0,0,0));
drawContours(rec, contours, -1, Scalar(0,255,0), 1);
imshow("Original", img);
imshow("Reconstructed", rec);
waitKey();
// Save all non-zero pixel positions
vector<Point> pts;
findNonZero(img, pts);
// Set the pixels to red, according to the points in pts
Mat3b rec2(img.rows, img.cols, Vec3b(0, 0, 0));
for (int i = 0; i < pts.size(); ++i)
{
rec2(pts[i]) = Vec3b(0,0,255);
}
imshow("Reconstructed 2", rec2);
waitKey();
return 0;
}
来设置
默认的C ++标准库。
但是,我不知道这个解决方案对你来说是多么切实可行,因为你必须使用树顶编译,直到下一个clang / llvm发布。
答案 1 :(得分:1)
我有三种方法可以做到这一点。第一个是使用Unix makefile的单个项目,第二个项目将根据需要提供多个项目,但需要编辑任意数量的文件以服务于任意数量的用户,第三个项目将适用于任意数量的项目或用户。您可能希望跳到第三个选项,但其余的则适合其他需要相似的人。
执行此操作的好方法是使用makefile。这样,您只需输入make
即可构建项目。如果您正在使用* nix,则不需要安装,大多数系统都会附带它。这是一个示例makefile,用于执行您要求的内容(只需将<progname>
替换为您的程序名称,将<filename>
替换为源文件名即可。只需将其粘贴到名为&#39; makefile&#39;的文件中即可。在与源文件相同的目录中。
FLAGS=-stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib
all: <progname>
progname:
clang++ $FLAGS progname
免责声明:我不使用clang ++,因此这可能是一个不完整的调用。在gcc中,您还需要指定-o outfile_name
,例如。
或者(因为我刚刚阅读了注释),您可以运行以下命令(假设您使用bash):
echo 'alias stdclang="clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib"' >> ~/.bashrc
从那时起,您只需键入stdclang <progname>
我能想到的最后一件事情与最后一件事情相似,但更具永久性。以root身份运行以下命令:touch /usr/bin/stdclang && chmod a+x /usr/bin/stdclang
然后使用您想要的任何编辑器编辑文件/usr/bin/stdclang
并添加以下行:
#!/bin/bash
clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib $@
然后,您可以运行stdclang <other_args>
让它自动扩展为clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib <other_args>