Articles of clang ++

如何在Linux上加载共享库延迟

我一直在寻找一种方法来创build一个共享库(让我们命名库“ libbar.so ”) 延迟加载到Linux上,它应该只有一个链接器的帮助下实现,而不是修改任何写在源代码上的东西C ++; 我的意思是我不想在父库的源代码中调用dlopen()和dlsym() (我们将其命名为“ libfoo.so ”)来调用libbar.so的函数,因为它们会使源代码变得混乱,维护过程困难。 (简而言之,即使在Linux上,我也希望继续使用Visual Studio的/ DELAYLOAD选项) 无论如何,到目前为止,我在互联网上发现了一些与我的问题有关的不确定的信息,所以如果能得到你们所有人的回答,我们将会非常高兴地回答以下问题,以使信息清晰。 GNU ld是否支持Linux上的延迟加载机制? 如果没有,那么Clang呢? dlopen()系列是在Linux上加载共享库延迟的唯一方法吗? 我testing了通过-zlazy标志GCC(g ++)的path到库,它似乎接受的标志,但行为没有看起来使libbar.so延迟加载(没有libbar.so ,我期待有一个第一次调用libbar.so时出现exception,但在进入libfoo.so之前实际发生exception)。 另一方面,铿锵(铿锵++)留下一个警告,它忽略了选项标志。 最好的祝福,

在Linux上为clang构buildlibc ++的方法是什么?

编辑/更新/注意:只要让clang使用libstdc ++。 到目前为止,我一直在为我工作得很好。 =============================== 在过去,我可以通过cmake做些事情,但是刚才我在http://llvm.org/svn/llvm-project/libcxx/trunk项目树的lib目录中发现了一个buildit脚本。 这个buildit脚本似乎不使用libsupc++ ,这是我以前使用的cmake方法。 例如, 本指南显示了一个cmake咒语来为libc++生成一个makefile文件,该文件将能够处理编译和安装。 我的问题是生成LLVM- libc++这些不同的方法和应该使用哪一个的区别是什么? 他们会有不同的performance吗? buildit脚本似乎没有提供任何安装帮助。 有没有方向如何正确安装图书馆? 用我之前用cmake构build的libc ++,我必须总是在链接器标志(和-L的path)中添加-lc++ ,这在我的OS X makefiles中是不必要的。

Linux中定义PATH_MAX在哪里?

我应该使用#include调用哪个头文件,以便能够使用PATH_MAX作为string大小的整数? 我想能够声明: char *current_path[PATH_MAX]; 但是当我这样做时,我的编译器(Linux上的Clang / LLVM)出现以下错误: recursive_find6.c:29:20: error: use of undeclared identifier 'PATH_MAX' char *current_path[PATH_MAX]; ^ 我试图做一个谷歌search,但仍然没有运气。 #include <limits.h>不解决问题/错误。 我也正确的说,PATH_MAX的值是一个int?

你需要安装使用Clang在Windows上构build64位的C + + 14?

更新: 我已经写了一个详细的教程,包含这个问题的前两个答案: http : //blog.johannesmp.com/2015/09/01/installing-clang-on-windows-pt1/ TL; DR 在Windows上,给定以下程序: #include <iostream> int main() { int arr[] = {1, 2, 3, 4, 5}; for(auto el : arr) { std::cout << el << std::endl; } return 0; } 我希望能够做到以下几点: clang++ hello.cpp -o hello.exe -std=c++14 并获得一个64位可执行文件正常工作 。 我不想再追加大量的-I包括告诉clang在哪里可以findiostream或其他标准的c ++头文件; 我不想在多个步骤中链接。 我不关心性能,效率,链接器的使用等等。我只是想能够正确设置clang / gcc /任何东西,这样我就可以使用一个单一的,快速和肮脏的控制台命令上面那个。 我需要安装什么才能工作 ? 问题 作为一个主要的Mac / […]

铿锵与Windows上的-faddress-sanitizer

我的意图是使用Clang作为Windows上的Valgrind的替代品,以在我编写的C / C ++程序中查找缓冲区溢出,dynamic内存滥用等。 按照此处提供的说明,我已经成功构build了Clang。 我试图用-faddress-sanitizer选项编译一个简单的C程序(在这里指定),并抛出下面的错误 – gcc.exe: error: unrecognized command line option '-faddress-sanitizer' Using built-in specs. COLLECT_GCC=C:/MinGW/bin/gcc.exe Target: mingw32 Configured with: ../gcc-4.7.0/configure –enable-languages=c,c++,ada,fortran,objc,obj- c++ –disable-sjlj-exceptions –with-dwarf2 –enable-shared –enable-libgomp –disable-win32-registry –enable-libstdcxx-debug –disable-build-poststage1-with-cxx –enable-version-specific-runtime-libs –build=mingw32 –prefix=/mingw Thread model: win32 gcc version 4.7.0 (GCC) clang: error: assembler (via gcc) command failed with exit code 1 (use -v […]

在Windows 10上运行LLVM传递在terminal没有输出?

我有来自LLVM.org的示例代码: #include "llvm/Pass.h" #include "llvm/IR/Function.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; namespace { struct Hello : public FunctionPass { static char ID; Hello() : FunctionPass(ID) {} bool runOnFunction(Function &F) override { errs() << "Hello: "; errs().write_escaped(F.getName()) << '\n'; return false; } }; // end of struct Hello } // end of anonymous namespace char Hello::ID = […]