我想使用Clang和LibTooling来创建一些C++源代码分析和转换工具.我按照本教程构建了Clang和LibTooling ,并且我已经能够使用我构建的Clang二进制文件运行并创建一些分析工具并编译C++程序.但是,如果我包含标准库中的标头(在源文件或我的工具中),则在编译或运行源文件/工具时会遇到问题.例如,如果我对以下C++源文件运行clang-check:
#include <iostream>
int main() {
std::cout << "Hello";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到"致命错误:找不到'iostream'文件".(注意:我可以编译C++程序,例如那些使用用户定义类的程序,而不是使用标准库的C++程序.)为了解决这个问题,我构建了libc ++(遵循本指南,在llvm/project中构建它)我构建LLVM和Clang的目录,但是我仍然无法使用Clang和使用libc ++的工具.现在,如果我尝试使用以下方法编译测试文件:
export CPLUS_INCLUDE_PATH="~/clang-llvm/llvm/projects/libcxx/include"
export LD_LIBRARY_PATH="~/clang-llvm/llvm/projects/libcxx/lib"
~/clang-llvm/llvm/build/bin/clang++ ~/Documents/main.cpp
Run Code Online (Sandbox Code Playgroud)
然后我得到"致命错误:'找不到'unistd.h'文件".所以我的问题是:我如何正确地指出Clang和我的工具使用libc ++?
我正在运行OS X Yosemite 10.10并使用Clang 3.6.0.
我正在使用Visual Studio 2015在64位Windows 10上使用SDL2编写C++项目.我最近购买了一台新的Windows 10笔记本电脑并从github克隆了我的项目.我的项目编译正确,但运行时出现以下错误:
应用程序无法正确启动(0xc000007b).单击"确定"关闭应用程序.
根据我目前的研究,这个错误通常是由加载不兼容的DLL引起的,例如64位版本而不是32位版本.到目前为止我发现的建议包括:
我的项目设置为Win32构建,我确保我使用的是我明确链接的所有DLL的32位版本(libfreetype-6,libpng16-16,SDL2,SDL2_image,SDL2_mixer和SDL2_ttf) .我已确认x86 VC++ Redistributable已安装在我的机器上.
最后,我尝试使用Dependency Walker来确定可能导致问题的DLL(虽然我已经读到了Dependency Walker有很多误报的警告).这些是结果:
在那之后,探查器冻结并且永远不会继续.请注意,SDL组件和VC运行时正在加载而没有错误.
该程序在我的两台旧机器上正确编译和加载,一台运行32位Windows 7,一台运行64位Windows 10.
现在是实际问题.我可以采取哪些其他步骤来调试此崩溃?或者有人从我提供的信息中看到我做错了什么?
相关问题:
正如rflobao建议的那样,我在32位exe上使用了64位版本的Dependency Walker.以下是我的分析运行的新输出:
此时,和以前一样,Dependency Walker冻结了.我仍然完全迷失了,并且不觉得我更接近能够确定导致问题的原因.
我正在制作一个开放世界的单人RPG,其中世界主要由孤立区域组成,其可扩展性分为几个部分.世界包含彼此相互作用的生物.大多数生物都会提到其他生物,可能包括其他地区的生物.being类似于可能的类定义
class Being {
weak_ptr<Being> target;
// other members
};
Run Code Online (Sandbox Code Playgroud)
当然,我需要能够在磁盘上保存和加载游戏状态.现在,我不想让所有生物一直装满.我只想加载那些靠近玩家的生物,或者最坏的情况是加载当前加载区域内的所有生物.实现这一目标的好策略是什么?以下是我到目前为止所提出的一些想法.
这些选择有更好的替代方案吗?我想这是一个常见问题,但我无法在SO上找到相关问题.