- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用 mingw(Windows 8 64 位,MinGW 20120426)在 Windows 上用 clang 构建了 llvm:
./configure --disable-docs --enable-optimized --enable-targets=x86,x86_64 && make && make install
构建成功。
现在我想使用 clang-c API 编译简单的程序:
#include <clang-c/Index.h>
int main (int argc, char** argv) {
CXIndex index = clang_createIndex (false,true);
}
运行 gcc:
gcc 1.cpp -IC:/MinGW/msys/1.0/local/include -LC:/MinGW/msys/1.0/local/lib -lclang -lstdc++
编译成功,但链接失败:
C:/MinGW/msys/1.0/local/lib/libclang.a(CIndex.o):CIndex.cpp:(.text+0xe3): undefined reference to `llvm::sys::MutexImpl::~MutexImpl()'
C:/MinGW/msys/1.0/local/lib/libclang.a(CIndex.o):CIndex.cpp:(.text+0x11f): undefined reference to `clang::SourceManager::isBeforeInTranslationUnit(clang::SourceLocation, clang::SourceLocation) const'
C:/MinGW/msys/1.0/local/lib/libclang.a(CIndex.o):CIndex.cpp:(.text+0x168): undefined reference to `clang::SourceManager::isBeforeInTranslationUnit(clang::SourceLocation, clang::SourceLocation) const'
C:/MinGW/msys/1.0/local/lib/libclang.a(CIndex.o):CIndex.cpp:(.text+0x333): undefined reference to `clang::SourceManager::isBeforeInTranslationUnit(clang::SourceLocation, clang::SourceLocation) const'
C:/MinGW/msys/1.0/local/lib/libclang.a(CIndex.o):CIndex.cpp:(.text+0x394): undefined reference to `clang::SourceManager::isBeforeInTranslationUnit(clang::SourceLocation, clang::SourceLocation) const'
C:/MinGW/msys/1.0/local/lib/libclang.a(CIndex.o):CIndex.cpp:(.text+0x435): undefined reference to `clang::SourceManager::isBeforeInTranslationUnit(clang::SourceLocation, clang::SourceLocation) const'
C:/MinGW/msys/1.0/local/lib/libclang.a(CIndex.o):CIndex.cpp:(.text+0x464): more undefined references to `clang::SourceManager::isBeforeInTranslationUnit(clang::SourceLocation, clang::SourceLocation) const' follow
C:/MinGW/msys/1.0/local/lib/libclang.a(CIndex.o):CIndex.cpp:(.text+0x476): undefined reference to `clang::SourceManager::getMacroArgExpandedLocation(clang::SourceLocation) const'
C:/MinGW/msys/1.0/local/lib/libclang.a(CIndex.o):CIndex.cpp:(.text+0x4e7): undefined reference to `clang::ASTUnit::Save(llvm::StringRef)'
...
超过 700 行。
$ llvm-config.exe --version
3.1
$ llvm-config.exe --prefix
C:/MinGW/msys/1.0/local
最佳答案
解决方案
从 llvm-config --cxxflags --ldflags --libs all 添加所有参数
我写的 makefile 像 this
CXX := g++
LLVMCOMPONENTS := all
RTTIFLAG := -fno-rtti
LLVMCONFIG := llvm-config
CXXFLAGS := $(shell $(LLVMCONFIG) --cxxflags) $(RTTIFLAG)
LLVMLDFLAGS := $(shell $(LLVMCONFIG) --ldflags --libs $(LLVMCOMPONENTS))
SOURCES = 1.cpp
OBJECTS = $(SOURCES:.cpp=.o)
EXES = $(OBJECTS:.o=)
CLANGLIBS = \
-lclang\
-lclangTooling\
-lclangFrontendTool\
-lclangFrontend\
-lclangDriver\
-lclangSerialization\
-lclangCodeGen\
-lclangParse\
-lclangSema\
-lclangStaticAnalyzerFrontend\
-lclangStaticAnalyzerCheckers\
-lclangStaticAnalyzerCore\
-lclangAnalysis\
-lclangARCMigrate\
-lclangEdit\
-lclangAST\
-lclangLex\
-lclangBasic\
$(shell $(LLVMCONFIG) --libs)
all: $(OBJECTS) $(EXES)
%: %.o
$(CXX) -o $@ $< $(CLANGLIBS) $(LLVMLDFLAGS)
编译链接成功。
关于c++ - 使用 clang API 编译程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16295581/
这个问题在这里已经有了答案: multiple definition error c++ (2 个答案) 关闭 3 年前。 我遇到了一些编译问题,这里是详细信息: 假设我声明了一些数据结构 my_d
我正在尝试使用 lessfs 并了解它如何使用 mhash 来生成其加密指纹,所以我正在查看 mhash 以了解它如何处理哈希算法,因此我正在尝试运行中提供的一些示例程序,但我遇到了并发症和错误 我试
所以我有一个编译程序,但我有两个小问题。该程序将十六进制转换为十进制和二进制,并将其显示在这个可爱的小 GUI 中。 问题: 我想将二进制文件放入一个数组中,然后在连续的 5 个小框窗口之间传输。转换
这可能是一个很难用我实际提供的信息进行故障排除的问题,但我希望有人至少能够为我指出一个可能的方向。 我正在尝试安装 HTK ( http://htk.eng.cam.ac.uk/ ),根据 this页
我用客户端松鼠在oracle 11g中创建了一个简单的过程,这是代码 create or replace procedure EXAMPLE_P is begin 1+2; end;/ 在执行
$2有 C 文件的路径。 问题是当我编译一个有错误的文件时,它会显示错误。我不想显示错误,我只想说:“$2 无法编译。”有什么想法吗? cc $2 if test ! $? = 0
我使用安装了 Advanced Tomato 的华硕路由器(基于 ARMv7 proc)在它上面作为我的 ARMv7 开发者平台。我安装编译器 (gcc - 5.4.0-1)加上来自 OpenWRT
我想在 Linux 上用 twitter 库编译一个 C++ 程序。 我目前使用 twitcurl 作为 twitter API 库并安装了 g++ 以及官方网站上列出的所有必要文件和包:http:/
我正在尝试编译使用 libdl 库中的 API 的示例代码: #include #include #include int main(int argc, char **argv) { v
我看到很多人提示 -O3 选项: GCC: program doesn't work with compilation option -O3 Floating Point Problem provid
有如下代码: #include #include int main(void){ CURL *curl; CURLcode res; curl = curl_easy_init();
我们有一个非常重要的应用程序,但到目前为止还没有源代码。该应用程序是用 COBOL 编写的,编译版本在我们的生产系统中并正在运行。 但是,我们需要迁移到新服务器和新的 cobol 编译器。我们的印象是
我正在尝试使用一些 curl 代码来测试库,但我无法编译它:( 我正在使用 Clion (Cmake + gcc),我有一个 libcurl.a、一个 libcurl.dll 和一个 libcurl.
我使用 mingw(Windows 8 64 位,MinGW 20120426)在 Windows 上用 clang 构建了 llvm: ./configure --disable-docs --en
我在 ubuntu 下写了一个程序,其中包含 gtkmozembed.h。我在编译程序时遇到问题。下面是使用 gtkmozembed 的程序的最简单形式。 #include #include #i
我在 Ubuntu 上使用 GNAT 编译了一个 Ada 程序。 之后,我尝试使用该程序进行几次测试,它运行正常。 但是当我将它上传到我的 Apache (UNIX) 网络服务器并尝试运行该程序时,没
我正在尝试通过批处理文件使用 MinGW 编译器运行我的程序。但是当我尝试启动它时,它什么也没说。 代码如下: g++ -o Learning.exe Main.o pause 当我打开 .exe 文
我在 Windows 8 计算机 (x64) 上使用 VS2012 编写了一个 Windows 窗体应用程序,我希望它在 Windows XP x86 上运行。当我尝试运行该程序时出现错误“...不是
我在运行 ArchLinux 的系统上使用 clang 版本 4.0.0,它一直运行良好,但最近我无法再编译使用某些 STL header 的程序了! 详细信息: clang --version 的输
我有程序 main.cpp 调用其他 C++ 程序 file1.cpp、file2.cpp 和 message.txt 请问如何使用 g++ 在 Linux Ubuntu 中编写编译命令,主要不是“v
我是一名优秀的程序员,十分优秀!