我在hello world示例中有以下Objective-c片段:
//hello.m
#import <Foundation/Foundation.h>
#import "hello.h"
void sayHello()
{
#ifdef FRENCH
NSString *helloWorld = @"Bonjour Monde!\n";
#else
NSString *helloWorld = @"Hello World\n";
#endif
printf("%s", [helloWorld UTF8String]);
}
//main.m
#import <Foundation/Foundation.h>
#import "hello.h"
int main (int argc, const char * argv[])
{
sayHello();
return 0;
}
在osx上构建这些东西工作正常并按预期运行。但是当在ubuntu上编译/链接它(使用GNUStep)时,在执行二进制文件时会导致分段错误。我把它钉在了printf语句中的转换操作中,但我不知道我在这里做错了什么或者我怎么能解决这个问题。
有趣的说明:使用gcc工具链构建可执行文件时,此工作正常。我在ubuntu上使用clang构建它时只看到了这个问题。
非常感谢任何帮助。
答案 0 :(得分:1)
要解决此问题,我最终将代码更改为以下内容:
...
void sayHello()
{
#ifdef FRENCH
NSString *helloWorld = @"${HELLO_WORLD_FRENCH}\\n";
#else
NSString *helloWorld = @"${HELLO_WORLD}\\n";
#endif
NSFileHandle *stdout = [NSFileHandle fileHandleWithStandardOutput];
NSData *strData = [helloWorld dataUsingEncoding: NSASCIIStringEncoding];
[stdout writeData: strData];
}
...