Lum7671's Weblog

책, Programming in Objective-C 2.0

Posted in Mac, Programming by lum7671 on 2009/10/06

현재 보고 있는 책입니다.

이것 저것 배우는 것을 좋아하는 성격에 여러 언어들을 사용하다 보니 언어는 비슷하다는 생각을 갖게 되었었습니다.
Objective-C 를 처음 본게 2007년 10월 경, 맥 네이트온 인수인계 받으면서 인데요.
이번에 맥 네이트온을 안정화 시키겠다고 다짐하고 달려들었지만
역시 내공이 모자랐던 것 같은 생각이 들었습니다.
오늘 “Programming in Objective-C 2.0″ 이란 책을 회사 동료가 가지고 있어서
잠시 빌려서 보고 있는데 기존에 알고 있던 것들을 좀 더 체계적으로 설명을 해주고
제대로 쓰는 방법을 알려주는 면이 있어서 재미있게 보고 있습니다.
특히 메모리를 제대로 쓰는 쪽이 관심이 많이가고 먼저 보게 되었습니다.
보면서 맥 네이트온 죽는 문제에 도움이 될 것 같아서 기분 좋게 보고 있습니다.

혹시, 맥 네이트온이 죽지 않게 할 좋은 책 있으면 추천해주시면 고맙겠습니다~ ㅎㅎ;
- 끝 -

Tagged with: , , , , ,

“void value not ignored as it ought to be.” – gcc said -

Posted in Programming by lum7671 on 2008/11/21

GTEST(Google test framwork)의 ASSERT_* 을 사용하다
“void value not ignored as it ought to be.” 에러를 만났다.

보니 함수의 리턴값이 void 가 아닌곳에서 void 리턴값을 갖는 것을 사용하면 에러가 나는것 같다.

예를들어,
int test()
{
ASSERT_TRUE( true);
}
이렇게 하면 컴파일에서 에러가 발생한다.

http://code.google.com/p/googletest/wiki/GoogleTestFAQ#My_compiler_complains_”void_value_not_ignored_as_it_ought_t

Q : My compiler complains “void value not ignored as it ought to be.” What does this mean? 

A : You’re probably using an ASSERT_*() in a function that doesn’t return void. ASSERT_*() can only be used in void functions.

ASSERT_TRUE() 를 EXPECT_TRUE() 로 바꾸니 에러가 나지 않았다.

ASSERT_*와 EXPECT_* 와 차이점 – 간단히 조건이 틀리면 함수를 종료하냐 계속하냐의 차이다.

Remember, when they fail, ASSERT_* yields a fatal failure and returns from the current function, while EXPECT_* yields a nonfatal failure, allowing the function to continue running. In either case, an assertion failure means its containing test fails.

Tagged with: , , , , ,

Cocoa, 디버그 log를 NSLog 대신 만들어 사용하기.

Posted in Mac, Programming by lum7671 on 2008/07/25

형식있는 로그를 만들기 위해서 다음과 같이 해봤다.

* common.h
...
#define __FILENAME__ (strrchr(__FILE__,'/')+1)
#define NMLog(msg) NSLog(@"%s(%d) - %@", __FILENAME__, __LINE__, msg)
...

* AppController.m

import "commin.h"
...
NMLog(@"XXX");

* NMSession.m

import "commin.h"
...
NMLog( (@"sendPacket : %@", aPacket) );

주의 : NMLog는 인자를 1개 받기 때문에 “()”를 사용해서 @”sendPacket : %@”, aPacket 를 쌌다. 안싸면 arg가 2개라고 NMLog를 찾을 수 없다는 에러를 낸다.

* 출력결과
...
2008-07-25 18:51:14.629 NateOn[2683] AppController.m(966) - XXX
2008-07-25 18:51:15.237 NateOn[2683] NMSession.m(653) -
...

참고 사이트 :
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=777

Tagged with: , , , ,

Cocoa, RegexKit Framework ld error in 10.4.11 tiger.

Posted in Mac, Programming by lum7671 on 2008/07/11
RegexKit Framework를 문서에 나온 데로 프로젝트에 추가했는데
컴파일에서 다음과 같은 에러가 발생하면, RegexKit Framework Source를 받아서 Compile해서 추가하면 에러가 발생하지 않는다.

collect2: ld returned 1 exit status
cd /Users/x/Documents/trunk/NateOn
/Developer/usr/bin/g++-4.0 -o /Users/x/Documents/trunk/NateOn/build/NateOn.build/Debug/NateOn.build/Objects-normal/ppc/NateOn -arch ppc /Developer/Library/PrivateFrameworks/ZeroLink.framework/Versions/A/Resources/libZeroLinkAppStub.a -Wl,-all_load -L/Users/x/Documents/trunk/NateOn/build/Debug -L/Users/x/Documents/trunk/NateOn -L/Users/x/Documents/trunk/NateOn -L/Users/x/Documents/trunk/NateOn -L/Users/x/Documents/trunk/NateOn -L/Users/x/Documents/trunk/NateOn -L/Users/x/Documents/trunk/NateOn -F/Users/x/Documents/trunk/NateOn/build/Debug -F/Users/x/Documents/trunk/NateOn/.. -F/Users/x/Documents/trunk/NateOn/.. -F/Users/x/Documents/trunk/NateOn -F/Users/x/Documents/trunk/NateOn/Frameworks -F/Users/x/Documents/trunk/NateOn -F/Users/x/Documents/trunk/NateOn -F/Users/x/Documents/trunk/NateOn -F/Users/x/Documents/trunk/NateOn -F/Users/x/Documents/trunk/NateOn -F/Developer/Local/Frameworks -F/Developer/Local/Frameworks -framework Growl -framework Cocoa -framework WebKit -lcrypto -framework Carbon -framework SystemConfiguration -framework IOKit -framework RegexKit -Wl,-Y,1455 -framework ZeroLink -F/Developer/Library/PrivateFrameworks -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -Wl,-x -Wl,-unexported_symbols_list -Wl,/Developer/Library/PrivateFrameworks/ZeroLink.framework/Versions/A/Resources/ZeroLinkAppStub.nexp -Wl,-sectcreate -Wl,__TEXT -Wl,__zerolink -Wl,/Users/x/Documents/trunk/NateOn/build/NateOn.build/Debug/NateOn.build/Objects-normal/ppc/NateOn.zerolink
/Developer/usr/bin/../libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning -F: directory name (/Users/x/Documents/trunk/NateOn/Frameworks) does not exist
/Developer/usr/bin/../libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: /Developer/Local/Frameworks/RegexKit.framework/RegexKit unknown flags (type) of section 6 (__TEXT,__dof_RegexKit) in load command 0
collect2: ld returned 1 exit status

주의사항

  • RegexKit Framework 컴파일은 README.MacOSX를 보고 Terminal에서 컴파일 한다. 소스안의 RegexKit.xcodeproj를 XCode로 컴파일하니 Warnning이 발생했다.
  • 개인적으로 MacPort를 사용하고 있어서 Termial에서 compile이 아마 XCode에서의 컴파일과 다르지 않을까? 하는 생각을 한다.

RegexKit 홈페이지 : http://regexkit.sourceforge.net/

Zemanta Pixie

dyld: Library not loaded… Reason: image not found

Posted in Mac, Programming by lum7671 on 2008/07/08

NateOn has exited due to signal 5 (SIGTRAP).
[Session started at 2008-07-08 15:53:39 +0900.]
dyld: Library not loaded: @executable_path/../Frameworks/Growl.framework/Versions/A/Growl
Referenced from: /Users/x/Documents/trunk/NateOn/build/Release/NateOn.app/Contents/MacOS/NateOn
Reason: image not found

좀 어이없는 설정으로 Framework link error에서 헤맨 것 같다.
결론적으로는 아래 그림에서 보이는 “Copy only when installing” 옵션이 켜져 있어서 에러가 발생했었다.

이게 켜져있으면 NateOn.app 디렉토리안에 Frameworks 의 자료들이 Copy가 되지 않는다.
개인적으로 판단하기에는 이 옵션이 기본인지 모르겠지만 컴파일 시간을 조금이라도 줄여보고자 체크가 되있었던것 같다.

Growl과 같이 Dynamic Library를 사용하는 Framework은 이 옵션을 꺼야한다.

Zemanta Pixie
Tagged with: , , ,