Articles of objective c

奇怪的CMake在Linux上共享lib连接问题

我在Linux上看到了一个奇怪的链接问题,它使用了一个跨平台的库项目,它使用CMake从同一个源码树创build一个OS X Framework和一个Linux共享库。 该项目的跨平台方面在过去(两年前左右)运行良好,但从那以后,我们专门在OS X上进行了开发工作。暂时放弃Linux的原因是开发人员短缺:所有那些仍然使用OS X的人 – 没有任何技术上的原因,在Linux上build立多年的源码。 有一个潜在的相关例外(稍后会有更多的例外),同时我们的来源也没有根本性的变化。 当然,Linux已经进步了,当然,当我们回到那里的时候,当然也有一些小的障碍。 像新版本的编译器抱怨过去没有抱怨过的事情(可疑的转换,void Voodoo等等)。 这些问题在短期内得到解决。 整个源代码树现在在Mint 17.1上再次编译,并带有一些绝对无害的剩余警告。 但是,连接失败了一个相当奇怪的信息: Linking CXX shared library lib<ourLibName>.so CMakeFiles/<file1>.co:1:1: error: stray '\177' in program CMakeFiles/<file1>.co:1:1: error: stray '\2' in program CMakeFiles/<file2>.co:1:1: error: stray '\213' in program (and so on, thousands of times, with seemingly random values in the quotes for all the […]

为什么回溯不包含Objective-C符号而不pipe-rdynamic?

更新:我正在使用Linux上的GNU运行时。 在Apple运行库的MacOS上不会发生此问题。 更新2:我编译了MacOS上的GNU运行时,并用它构build了这个例子。 GNU运行时在MacOS上不会发生该错误。 我会说问题是glibc(因为backtrace和backtrace_symbols是glibc扩展)。 当使用backtrace和backtrace_symbols在GCC编译的Objective-C应用程序中打印backtrace_symbols ,我没有得到任何Objective-C符号。 只有文件名,地址和C符号出现。 我用-g编译,并与-rdynamic 。 我的testing应用程序 void _printTrace() { void *addr[1024]; int aCount = backtrace(addr, 1024); char **frameStrings = backtrace_symbols(addr, aCount); for (int i = 0; i < aCount; i++) { printf("%s\n", frameStrings[i]); } free(frameStrings); } @interface TheObject + (void)_printTrace; + (void)printTrace; @end @implementation TheObject + (void)_printTrace { _printTrace(); } […]

你能把一个C ++ Linux针对性的应用程序链接到一个Objective-C静态库吗?

我已经看到了很多关于如何将一个Objective-C应用程序链接到C ++库的信息,但是你可以用相反的方法做到吗? 我的合作伙伴和我一直在使用Objective-C来开发iPhone应用程序。 通过项目的一半,我们决定添加一个新的function。 此function需要推送通知,所以我们需要编写将在Linux机器上运行的服务器端应用程序。 这个服务器应用程序需要访问一些(大部分,实际上)用Objective-C编写的代码。 我想我们有两个select:用C / C ++重新编写整个东西,或者在Linux上重新编译Objective-C代码。 由于重写时间太长,我想采取第二条路线。 我设法使用GCC和GNUstep将我们需要的linux服务器应用程序所需的Objective-C类编译成一个静态库。 我想用C ++编写实际的服务器应用程序,但我需要将该应用程序链接到Objective-C库。 可以这样做吗? 怎么样? 如果没有,任何人都可以给我一个如何去做这个想法?

错误:在Linux上编译Objective-C时重新定义“struct StructName”消息

我正在尝试在Ubuntu 12 Linux上编译Objective-C代码。 main.m看起来像这样: #import <Foundation/Foundation.h> #import "CEFoo/CEFoo.h" int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog (@"hello world"); [pool drain]; return 0; } 在CEFoo.h中,我有这样的定义: struct StructName{ // line 86 BOOL first; … … }; @interface StructName :NSObject // line 92 BOOL first; // line 93 … […]

C ++ / Objective-C – 如何分析一个大项目(Unix方式)?

通常,为了分析大C项目,我更喜欢grep / GNU命令行工具, lint ,简单的Python脚本。 说“分析”C项目我的意思是收集代码统计信息,了解项目的结构,数据结构和执行stream程 – 什么函数调用什么,在不同模块中的入口点,静态成员,线程等。用面向对象的代码很好。 每当我有一个大的C ++(或Objective-C)项目,包含大量的源文件和几个目录,我想看看它的类图,数据字段,方法,消息,实例等。 我正在寻找一个最Unix的解决scheme。 你可以帮我吗?

将Objective-Cterminal应用程序从Mac OS X移植到Linux?

好吧,这里的交易 – 没有什么关键的,只是我的另一个编译器方面的项目(是的,这是我的兴趣之一,我承认),但我想知道: 我使用完全集成的lex(Flex)和yacc(Bison) 编译器的核心(程序)在Objective-C中被编码为100%,只是使用Foundation 所以,这是一个问题: 一旦程序运行起来,在将程序移植到其他基于nix的操作系统,Linux等之前需要付出多less努力? 有什么build议? 边注 : 我用C / C ++专门编写了几乎10个编译器。 但是:我喜欢Objective-C,并且想到在这个编译器创build项目(实际上是一个解释器)中使用它作为一个实验。 问题是,因为我打算在我的Gentoonetworking服务器上使用结果编译器,这可能是一个有点差的select吗?

如何在Windows中编译Objective-C代码以成功执行我的代码?

因此,根据本网站的指示,我从GNUStep网站下载了GNUStep Windows安装程序 然后我按以下顺序安装了以下的稳定版本: GNUstep MSYS System GNUstep Core GNUstep Devel 然后我写下下面的代码: #import <Foundation/Foundation.h> int main(int argc, const char *argv[]){ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSArray *funnyWords = @[@"Schadenfreude", @"Portmanteau", @"Penultimate"]; for (NSString *word in funnyWords) { NSLog(@"%@ is a funny word", word); } [pool drain]; return 0; } 为了编译代码,我尝试使用这个命令: $ gcc `gnustep-config –objc-flags` -o […]

在Linux中使用cocoa命令行应用程序

我在使用Foundation Framework的Objective-C(在xCode中)编写命令行工具。 我必须使用Objective-C,因为我需要解压缩以前由NSKeyedArchiver存档的对象。 我的问题是,我想知道如果我现在可以在我的Linux Web服务器上使用这个编译的应用程序。 我不确定是否会出现运行时问题,或者可执行文件是否可以成为我自己的Linux服务器上运行的独立程序。 我会很感激任何反馈。

将自定义运行循环与libdispatch集成

我正在尝试构build一个必须pipe理自己的运行循环的应用程序。 我想在这个应用程序中使用libdispatch。 但是,使用libdispatch需要调用dispatch_main(),这是一个阻塞方法。 我不能阻止主线程。 有没有办法将自定义运行循环与libdispatch集成,而不使用阻塞dispatch_main()? 我在libdispatch的queue.c中看到对_dispatch_main_queue_callback_4CF的引用,看起来很有希望。 有没有办法使用这种方法来实现相同的? 这种方法的文档相当稀less。 理想情况下,我不需要使用NSRunLoop / CFRunLoop。

在Linux下构buildObj-c程序时,无法findFoundation / NSObject.h

我刚刚开始在Ubuntu Linux上学习obj-c,我遵循的教程是http://www.otierney.net/objective-c.html ,当我键入需要Foundation / NSObject.h的代码时,错误出现了: Fraction.h:1:致命错误:Foundation / NSObject.h:没有这样的文件或目录 我find了解决办法,find了一个合适的一个gcc -o Fraction -I/usr/GNUstep/System/Library/Headers -L/usr/GNUstep/System/Library/Libraries Fraction.m -ldl -lobjc 我试过这个,但是我发现我在Library目录下找不到Headers。 (我的GNUstep文件夹是/ usr / share / GNUstep)。 有谁知道如何实现标题? 我安装了所有与GNUstep相关的开发包,但仍然没有运气。 希望我明确地陈述我的问题。 对不起我的英语不好。