使用clang ++时默认启用libc ++ / libcxx

时间:2013-11-11 07:38:39

标签: linux clang libc++

我按照说明here从头开始安装clang。之后,我根据说明here使用libc++安装了libsupc++

现在,每当我编译&将程序与clanglibc++相关联,我需要发出如下命令:

clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib <...>

有没有办法以默认使用libc++的方式配置/编译clang,而不必每次都在命令行上指定库和/或路径?将它放入LD_LIBRARY_PATH也不是首选,也不是使用自定义包装脚本。

2 个答案:

答案 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的单个项目,第二个项目将根据需要提供多个项目,但需要编辑任意数量的文件以服务于任意数量的用户,第三个项目将适用于任意数量的项目或用户。您可能希望跳到第三个选项,但其余的则适合其他需要相似的人。

  1. 执行此操作的好方法是使用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,例如。

  2. 或者(因为我刚刚阅读了注释),您可以运行以下命令(假设您使用bash):

    echo 'alias stdclang="clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib"' >> ~/.bashrc
    

    从那时起,您只需键入stdclang <progname>

  3. 就可以使用链接的libc ++库进行构建
  4. 我能想到的最后一件事情与最后一件事情相似,但更具永久性。以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>