如果使用llvm-gcc或dragonegg,我如何在LLVM IR指令和源代码行之间存储地图?
在iOS 4.3 Simulator上,以下代码返回一个非常小的数字:1e-700在GCC 4.2上,但在LLVM-GCC 4.2上按预期工作.有任何想法吗?
NSDate *selectedDate = self.datepicker.date; // guaranteed to be before now
NSTimeInterval interval = [nowDate timeIntervalSinceDate:selectedDate];
Run Code Online (Sandbox Code Playgroud)
这些值随每次运行而变化,但这是一组示例输出
selectedDate: 1981-06-02 16:27:34 +0000
nowDate: 2011-08-03 05:18:36 +0000
间隔: 5.489011535689859e-277
[nowDate timeIntervalSinceDate:selectedDate]在GDB中运行:( 952001462.97236204这是我的期望值)
我有一个使用触摸事件在屏幕上绘制的应用程序.我UITouch locationInView用来恢复CGPoint触摸.问题是x和y坐标总是相同的 - 但仅限于运行iOS 4.2.1的第二代设备,并且仅当我的应用程序是在发布模式下构建时.直接从一个touchesMoved或touchesEnded事件对象进行触摸时,这似乎也只是一个问题,因为我的按钮正确地响应了触摸.
感谢http://getmoai.com/forums/new-users/ios-touch-sensor-y-co-ordinate-always-the-same-as-x/上的帖子我能够通过使用来解决问题LLVM-GCC编译器而不是较新的LLVM 3.0编译器,并使用优化级别0.
有趣的是,使用GCC编译器在touchesEnded更改优化级别时-O0更正了我收到的触摸位置,以更正我收到的触摸位置touchesMoved.我无法解释为什么会这样,但是现在我欣喜若狂,我的应用正在研究这些设备.
我的问题是 - 使用旧编译器将我的应用程序交付到商店有什么缺点?(我理解优化级别的影响.)是否有任何方法来配置项目,以便我使用较旧的编译器和较低的优化级别仅适用于iOS 4.2.1和/或第二代设备?
使用pip在Python中安装软件包时,我遇到了以下错误:
unable to execute gcc-4.2: No such file or directory
Run Code Online (Sandbox Code Playgroud)
显然,pip正在尝试使用gcc-4.2,它不在任何二进制目录中,即/ usr/bin.在浏览了这个网站和其他网站后,我发现其他许多人都遇到了同样的问题.但是,在OS X Lion中将gcc更新为版本4.2,这不是版本问题,而是在/ usr/bin下将gcc称为gcc,而不是gcc-4.2,并且符号链接到llvm-gcc.在/ usr/bin中添加gcc-4.2作为gcc的符号链接后,pip能够成功安装所有内容.为什么呢,那个pip正在寻找gcc-4.2而不是gcc?这是pip,OS X Lion或pip中试图用gcc-4.2自行安装的软件包的错吗?
最后,我的符号链接在这种情况下是正确的做法,还是应该以其他方式解决这个问题?
我正在尝试开发基于LLVM基础结构的编译器.我的语言有类似C语法,因此我想利用现有的C编译器.现在我专注于前端(词法分析,解析),但我很困惑哪个前端是最好的方法.Clang,llvm-gcc还是传统的flex/bison工具?
我对最简单的解决方案特别感兴趣,这个解决方案允许我为编译器的后续阶段生成LLVM IR代码.
我有.jar文件,它在运行时读取一个.dylib库,我在OSX中用GCC编译器编译.
应用程序在OSX 10.6.8上运行没有任何问题.
Java版本:
java版"1.6.0_33"Java(TM)SE运行时环境(版本1.6.0_33-b10-424-10M3720)Java HotSpot(TM)64位服务器VM(版本20.8-b01-424,混合模式)
GCC版本:
i686-apple-darwin11-llvm-gcc-4.2(GCC)4.2.1(基于Apple Inc. build 5658)(LLVM build 2336.1.00)
我使用64位Java和libs,其中.jar需要为x86_64编译.所以,在Snow Leopard上,一切都运行良好.
我现在将我的应用程序切换到OSX 10.7.4.在那里我尝试了两个不同的Java版本:
第一个Java版本(与Snow Leopard相同):
java版"1.6.0_33"Java(TM)SE运行时环境(版本1.6.0_33-b10-424-10M3720)Java HotSpot(TM)64位服务器VM(版本20.8-b01-424,混合模式)
第二个Java版本(今天更新):
java版"1.6.0_35"Java(TM)SE运行时环境(版本1.6.0_35-b10-428-11M3811)Java HotSpot(TM)64位服务器VM(版本20.10-b01-428,混合模式)
GCC版本:
i686-apple-darwin11-llvm-gcc-4.2(GCC)4.2.1(基于Apple Inc. build 5658)(LLVM build 2336.9.00)
我首先尝试使用在Snow Leopard上编译的.dylib来运行应用程序,但是我收到了这个错误:
位置0x0的内存访问无效rip = 0x7fff894aa697分段错误:11
还有新的线路没有导致应用程序崩溃,但它们没有在Snow Leopard上显示:
java[1366] <Error>: CGContextGetCTM: invalid context 0x0
java[1366] <Error>: CGContextSetBaseCTM: invalid context 0x0
java[1366] <Error>: CGContextGetCTM: invalid context 0x0
java[1366] <Error>: CGContextSetBaseCTM: invalid context 0x0
Run Code Online (Sandbox Code Playgroud)
在这次崩溃之后,我尝试在Lion上重新编译依赖.dylib与GCC,但是没有改变.我仍然得到Segmentation fault:11错误.
我在网上读到了这个错误,据我所知,它经常出现在Lion上,因为Java更新可能搞砸了,但是因为我对Java不太熟悉 - 有没有人遇到过这些问题,如果有的话,有没有办法解决这个问题?
非常感谢.
[编辑#1:在OSX 10.7.4上尝试使用Java 7]
使用Java 7运行.jar时,会再次发生崩溃,这是错误报告:
#
# A fatal error has been …Run Code Online (Sandbox Code Playgroud) 我有一个针对Apple的LLVM 4.2编译器(Base SDK 6.1)编译的库.在其中有对象下标.
想象一下,我的库只有一个类有一个方法.那个方法做到了这个:
NSLog(@"****** preTests");
NSDictionary *dictTest = @{ @1 : @1 };
NSLog(@"Initialized Dictionary");
NSArray *arrayTest = @[ @1, @2, @3 ];
NSLog(@"Initialized Array");
NSLog(@"****** arrayTest[1] = %@", arrayTest[1]); // First use of subscripting
NSLog(@"****** dictTest[@1] = %@", dictTest[@1]);
Run Code Online (Sandbox Code Playgroud)
现在我创建一个新项目并链接此库.在我的应用程序委托中,我调用此方法.我使用GCC LLVM 4.2编译器编译此应用程序.它编译和链接很好.
此应用程序将在iOS 6+上无错误运行.此应用程序将在iOS 5的"首次使用下标"(上图)中崩溃.
2013-07-03 09:15:51.050 GCCTest[167:707] -[__NSArrayI objectAtIndexedSubscript:]: unrecognized selector sent to instance 0x381fb0
Run Code Online (Sandbox Code Playgroud)
使用Apple LLVM 4.2编译器对其进行编译,它将正常运行.
objectAtIndexedSubscript:是一种在iOS 6中公开发布的方法,我的理解是它的语法糖myArray[0]被翻译成了什么.
有人可以帮助我理解为什么我看到GCC崩溃而不是苹果与iOS 5崩溃?我猜它与某些地方的某些宏有关...如果不编辑我的库代码,这可能会导致GCC崩溃吗?
当我跑步时,brew -- config我得到了
HOMEBREW_VERSION: 0.9.5
ORIGIN: https://github.com/Homebrew/homebrew
HEAD: bc071fb5448628aea8f066bbc0f37b0ecb4f11ee
Last commit: 16 hours ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_CELLAR: /usr/local/Cellar
CPU: quad-core 64-bit haswell
OS X: 10.10.1-x86_64
Xcode: 6.1.1
CLT: 6.1.1.0.1.1416017670
couldn't understand kern.osversion `14.0.0'
GCC-4.2: build 5666
Clang: 6.0 build 600
X11: 2.7.7 => /opt/X11
System Ruby: 2.0.0-p481
Perl: /usr/bin/perl
Python: /usr/local/bin/python => /usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/bin/python2.7
Ruby: /usr/bin/ruby
Run Code Online (Sandbox Code Playgroud)
即使我的Xcode(在优胜美地)命令行工具似乎是最新的(以确保我重新运行xcode-select --install)并在正确的地方
/Applications/Xcode.app/Contents/Developer
Run Code Online (Sandbox Code Playgroud)
根据xcode-select -print-path,我(唯一)gcc是
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过cygwin. 安装它时,它失败并显示错误:
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/include/c++/type_traits:311:39: error: __float128 is not supported on this target
struct __is_floating_point_helper<__float128>
^
Run Code Online (Sandbox Code Playgroud)
现在在调查它时,我发现它与clang支持'__float128'on only select 目标的问题有关,即在 3.9.0 之前不支持 clang__float128并且在 3.9.0 之前它定义了类型别名作为解决方法。
从 3.9.0 开始,clang 实现了本机__float128 support,并删除了别名解决方法。目前唯一支持 __float128 的目标是linux x86_64 and i686
因此我的问题是,是否有任何解决方案可以消除此错误?
我在LLVM IR中创建了一个函数。现在我想创建一个返回指令return void。
我看到了功能创建 ReturnInst::(LLVMContext &C, Value *retVal, BasicBlock *InsertAtEnd)
但是我不知道retVal应该怎样才能让它返回return void
llvm-gcc ×10
llvm ×5
gcc ×4
clang ×2
macos ×2
objective-c ×2
cocoa-touch ×1
command-line ×1
cygwin ×1
gnu ×1
homebrew ×1
ios-4.2 ×1
java ×1
llvm-clang ×1
llvm-ir ×1
osx-lion ×1
parsing ×1
pip ×1
python ×1
touchesmoved ×1
xcode ×1