假设我有以下预处理器定义
#define MYNUMBER 10f;
我想在我的代码中使用它如下:
float someResult = MYNUMBER * 3;
Run Code Online (Sandbox Code Playgroud)
当我这样做时,Xcode认为我试图*用作一元指针标记而不是乘法符号,并导致错误.定义这样一个常量并在乘法表达式中使用它的正确方法是什么?
我将SoundCloud API添加到iOS项目中,我没有使用ARC.SoundCloud代码使用
@property(nonatomic, strong, readonly) NSArray *accounts;
Run Code Online (Sandbox Code Playgroud)
我应该改变它吗?
@property(nonatomic, retain) NSArray *accounts;
Run Code Online (Sandbox Code Playgroud)
并继续使用GCC或我应该更改为LLVM编译器?
如果我采用海湾合作委员会的路线,还有什么可以改变的,我不是百分之百关于这两个选项如何影响项目?这只是上面的变化吗?
我现在在玩LLVM,它是JIT。我对JIT非常感兴趣,然后写了一个小GTK + hello世界:
#include <gtk/gtk.h>
int main ()
{
gtk_init(NULL, NULL);
GtkWidget *win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (win, "delete-event", G_CALLBACK (gtk_main_quit), NULL);
GtkWidget *lbl = gtk_label_new ("hello world");
gtk_container_add (GTK_CONTAINER (win), lbl);
gtk_widget_show_all (win);
gtk_main();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我以这种方式将其编译为Bitcode:
clang -emit-llvm -S a.c `pkg-config --cflags gtk+-3.0`
llvm-link a.s -o a.o
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时
> lli a.o
LLVM ERROR: Program used external function 'gtk_init' which could not be resolved!
Run Code Online (Sandbox Code Playgroud)
我试图找出如何在链接时添加外部库,但没有发现任何问题。有没有办法让它运行?
(我对汇编语言几乎一无所知)。
我正在尝试遵循本教程。
问题在于他的编译器和我的测试设置(Linux 32位上的gcc)产生了完全不同的输出,并且比我的主要设置(OSX 64位上的clang)产生的输出要少得多。
这是我的输出 int main() {}
Linux 32位上的gcc
$ cat blank.c
int main() {}
$ gcc -S blank.c
$ cat blank.s
.file "blank.c"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
popl %ebp
.cfi_def_cfa 4, 4
.cfi_restore 5
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
.section .note.GNU-stack,"",@progbits
Run Code Online (Sandbox Code Playgroud)
Mac OSX 64位上的叮当声
$ cat blank.c
int main() {}
$ clang …Run Code Online (Sandbox Code Playgroud) 这是我读过的有关JVM的内容.HotSpot基于堆栈,Dalvik是基于寄存器的.如果HotSpot是基于堆栈的,那么一旦我们将代码重新表示为块,为什么我们需要完成寄存器分配?
另外,llvm在哪里适合这个?我读到我们可以使用llvm核心和后端来获取java源代码.HotSpot是否使用LLVM?
我对Clang API了解不多,所以请原谅这个愚蠢的问题.
如果我正在为与C++具有相同或相似功能的语言构建编译器,我可以使用Clang API来为我的代码生成负责吗?例如,假设我实现了一个解析器来解析以下代码:
def class Adder
def func Add(x as int, y as int) as int
return x + y
Run Code Online (Sandbox Code Playgroud)
现在说我解析了这段代码并且我有AST,我可以使用Clang API为我生成这个类的代码吗?
我知道我可以使用LLVM API,但我已经这样做了,但是LLVM的级别相对较低而且它不支持OOP,所以我必须自己支持它们,这根本不是一件容易的事.所以我想知道是否还有雇用Clang为我做这项工作.如果是的话,如果您能提供示例和链接,我将不胜感激.
谢谢
在ubuntu-14.10_amd64中,我通过clang/llvm-3.4编译smplayer-14.9.0.6690.我在src中更改了Makefile,如:
CC=clang
CXX=clang
CFLAGS = -emit-llvm ...
CXXFLAGS = -emit-llvm ...
LINK = llvm-link
TARGET = smplayer.bc
Run Code Online (Sandbox Code Playgroud)
...
最后我得到了smplayer.bc.然后我用了
$ llvm-dis smplayer.bc -o smplayer.ll
$ lli -load=... -load=...... smplayer.ll
Run Code Online (Sandbox Code Playgroud)
但它有一个错误:
LLVM ERROR: Program used external function '__dso_handle' which could not be resolved!
Run Code Online (Sandbox Code Playgroud)
然后我使用clang将bc构建为本机可执行文件,如下所示:
$ clang smplayer.bc -v -o smplayer.na -m64 -L/usr/lib/x86_64-linux-gnu -lz -lQtDBus -lQtScript -lQtXml -lQtGui -lQtNetwork -lQtCore -lpthread
Run Code Online (Sandbox Code Playgroud)
错误是:
/usr/bin/ld: /tmp/smplayer-7c5fc5.o: undefined reference to symbol '__cxa_pure_virtual@@CXXABI_1.3'
/usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line
Run Code Online (Sandbox Code Playgroud) 我是新手LLVM IR,我正在尝试模拟一些x86指令LLVM IR.
这是一个简单的案例:
move %eax, %ebx
Run Code Online (Sandbox Code Playgroud)
但是,mov在查看此处和此处的材料后,我没有找到任何相应的操作码.
所以我的问题是:
如果我想mov使用LLVM IR 模拟操作码?我该怎么办?
我是新手LLVM IR,也许我会花很长时间在这个"模拟"工作上,关于LLVM IR的最佳参考应该是什么?
如果有人能给我一些帮助,我真的很感激.谢谢!
最近我试图安装llvm-general-3.5.1.0软件包大约一个星期.基本上我收到此错误:链接.我的情况完全相同.Windows 10,ghc 7.10.2,cabal 1.22.4.0.我用cmake从源代码安装了llvm 3.5.2,一切都很顺利.在llvm/lib目录中,我有*.lib文件(例如LLVMAnalysis.lib).
但不知何故,cabal无法看到这些库并给出了这个令人沮丧的错误:
配置llvm-general-3.5.1.0 ... setup.exe:缺少对外部库的依赖:*缺少C库:LLVMLTO,LLVMObjCARCOpts,LLVMLinker,LLVMipo,LLVMVectorize,LLVMBitWriter,LLVMCppBackendCodeGen,LLVMCppBackendInfo,LLVMTableGen,LLVMDebugInfo,LLVMOption,LLVMX86Disassembler, LLVMX86AsmParser,LLVMX86CodeGen,LLVMSelectionDAG,LLVMAsmPrinter,LLVMX86Desc,LLVMX86Info,LLVMX86AsmPrinter,LLVMX86Utils,LLVMJIT,LLVMIRReader,LLVMAsmParser,LLVMLineEditor,LLVMMCAnalysis,LLVMMCDisassembler,LLVMInstrumentation,LLVMInterpreter,LLVMCodeGen,LLVMScalarOpts,LLVMInstCombine,LLVMTransformUtils,LLVMipa,LLVMAnalysis,LLVMProfileData,LLVMMCJIT,LLVMTarget, LLVMRuntimeDyld,LLVMObject,LLVMMCParser,LLVMBitReader,LLVMExecutionEngine,LLVMMC,LLVMCore,LLVMSupport这个问题通常可以通过安装系统包,提供这些库解决(你可能需要"-dev"版本).如果库已经安装但是在非标准位置,那么您可以使用标志--extra-include-dirs =和--extra-lib-dirs =来指定它们的位置.
我真的想在我的Windows上使用这个软件包,但似乎没有任何工作(我尝试了所有的东西,如--extra-lib-dirs,并与MinGW和VS一起编译 - 同样的问题).
我不能接受它不会安装的事实.我的意思是,必须有一些方法来修复此cabal包中的Setup.hs.有没有人知道在这种情况下cabal有什么问题,我该如何尝试解决这个问题?我不知道cabal究竟是如何运作的,也许有这种知识的人会有想法?或者也许有一种方法可以做到这一点没有cabal?
我正在尝试使用GCC 4.8.5在CentOS 7上构建llvm 3.4.2.我可以成功构建所有的lib,除了libLLVM-3.4.so不想构建 - 除了那个之外还创建了其他所有的东西.更糟糕的是我以前曾经管理过它,但现在不能再做了.
我已经尝试过使用CMake和autotools,结果相同.有没有我错过的选择?或者配置中可能有一些错误?
llvm ×10
clang ×3
ios ×2
linux ×2
objective-c ×2
assembly ×1
c++ ×1
cabal ×1
gcc ×1
ghc ×1
haskell ×1
java ×1
jvm-hotspot ×1
llc ×1
llvm-clang ×1
llvm-ir ×1
soundcloud ×1
windows-10 ×1
xcode4.3 ×1