when i compile log4cxx i get the same error message :
inputstreamreader.cpp:66: error: 'memmove' was not declared in this scope
can you tell how to fix it?

Try adding to inputstreamreader.cpp a

#include <string.h>

and see if that helps. If it doesn't, search your compiler headers to see where it defines memmove(). Please report the compiler and OS in use, since this does not occur with most compilers.
저작자 표시
Posted by 배고파씨

linux에서 특정 문자열을 치환하는방법에는 여러가지가 있는데 


나는 다음과 같은 명령어로 해보았다.

(치환 결과를 다른 파일에 저장해야 할 때)

$ cat {SOURCE_FILE_NAME} | sed 's/{ORIGINAL}/{CHANGE}/g' > {NEW_FILE_NAME}

(치환 결과를 원본에 저장할때)

$ sed -i 's/{ORIGINAL}/{CHANGE}/g' {FILE_NAME}


{ORIGINAL} : 원본 문자열
{CHANGE}  : 바뀔 문자열


p.s {} 는 보기 편하라고 넣은거지 진짜로 저 괄호로 감싸서 넣지 마라.
Posted by 배고파씨

일반적으로 dump 백업 후 (4.1에서) 5.0 으로 복원하기가 쉽지는 않다.(언어셋부터, 키워드 때문에 잘 안됨)

노가다 방법은 많으니 제쳐두고 서버가 4.1, 5.0 두대 다 있을것으로 가정하고 복원 백업하는 방법이다. 이게 젤 편한거 같음

먼저 4.1과 5.0 서버의 charset은 미리 맞춰두고 시작한다.

그게 아니라면 dump시 옵션으로 준다.

4.1 서버에서 5.0 서버가 접근할 수 있는 유저를 추가한다.

5.0 서버에서 4.1 서버로 바로 access 해서 dump 실행시킨다.

mysqldump -u user -p --default-character-set=euckr -Q -h IP db_name > db.sql

mysql -u root -p --default-character-set=euckr < db.sql

위 방법이 젤 간단한거 같음.

Posted by 배고파씨

gcc 4.1.x 버전에서 extra qualification error 관련 해서 포스팅 합니다.

예를 들어 아래와 같은 클래스가 있다고 가정하면

class AClass
{
    public:
             AClass::AClass(){};
             virtual AClass::~AClass(){};
}

gcc (g++) 4.1.x로 컴파일 하면 아래와 같은 애러 메세지가 나옵니다.

error: extra qualification AClass:: on member AClass

4.1.x의 gcc는 위와 같은 코드에서 클래스 멤버 함수 앞에 붙은 제한자에 대해 클래스 명과 네임스페이스명을 구분 하지 못해서
위와 같은 컴파일 애러를 내는 것 같습니다.

해결책은 gcc 3.4 버전을 사용하든지 버그가 수정된 4.1.x 이후 버전을 사용하거나 제한자를 사용 하지 않아야 합니다.

요렇게...

class AClass
{
    public:
             AClass(){};
             virtual ~AClass(){};
}

Posted by 배고파씨
애플 개발자 사이트의 내용입니다

Touch 3G를 개발 기기로 사용하실경우 다음 작업을 해주세요.
* iPhone, iPhone 3G, iPhone 3GS, Touch, Touch 2G는 관련없습니다.

터미널에서 다음 명령문(한줄)을 칩니다.

ln -s /Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.1.1\ \(7C145\) /Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.1.1\ \(7C146\)


만약 SDK(및 개발툴, xCode)를 설치하신 경로가 다를경우 명령줄의 해당 경로를 수정해 주세요.




--- by 맥부기(문씨님)

Posted by 배고파씨
1. CentOS의 방화벽을 모두 해제한다.

2. Parallels 에서 Virtual Machine->Install Parallels Tools... 을 실행해서 Parallels Tools을 CentOS에 마운트 시킨다.

3. mount -o remount,exec /media/Parallels\ Tools 실행

4. /media/Parallels\ Tools로 이동 후 ./install --force-install 실행

5. 재부팅 후 ./install 을 다시 실행해서 upgrade 한다.

Posted by 배고파씨

ls 결과를 색깔로 구분해서 표시하기

Mac OS X 에 설치되어 있는 ls 명령은 -G 설정 혹은 CLICOLOR 환경 변수와 함께 사용되면, 결과들을 색깔별로 구분해서 나열할 수 있습니다. 여기에 표시되는 색깔들의 구분은 LSCOLORS 환경 변수를 따로 지정해서 사용자의 입맛에 맞게 변경할 수도 있답니다.

그래서, 예를 들어 만약 디렉토리 표시 색깔을 기본 파란색에서 노란색(원래 d값은 갈색을 나타내지만, 실제로는 노란색과 비슷하게 표시됩니다)으로 바꾸려면 터미널 초기 설정 파일(tcsh: ~/.cshrc, bash: ~/.profile)에 다음과 같이 설정해 줍니다.

tcsh shell일 경우:

코드:

setenv CLICOLOR 1
# use yellow for directories listing
setenv LSCOLORS dxfxcxdxbxegedabagacad

bash shell일 경우:

코드:

export CLICOLOR=1
# use yellow for directories listing
export LSCOLORS=dxfxcxdxbxegedabagacad

여기에 더해서, alias인 alias ls="ls -G" 설정을 추가해 주면 매번 ls 명령을 입력할 때마다, -G 설정을 입력할 필요가 없게 됩니다.

참고로, 기본 LSCOLORS의 설정값은 "exfxcxdxbxegedabagacad"이며, 변수의 속성들은 각기 쌍을 이루며 글자색배경색으로 묶여 있습니다. 여러 속성들의 순서는, 다음과 같습니다:

1. directory  2. symbolic link  3. socket  4. pipe  5. executable  6. block special  7. character special 
8. executable with setuid bit set  9. executable with setgid bit set 
10. directory writable to others, with sticky bit  11. directory writable to others, without sticky bit


그리고, 색깔을 나타내는 지시자들은 다음과 같습니다:

a     black
b     red
c     green
d     brown
e     blue
f     magenta
g     cyan
h     light grey
A     bold black, usually shows up as dark grey
B     bold red
C     bold green
D     bold brown, usually shows up as yellow
E     bold blue
F     bold magenta
G     bold cyan
H     bold light grey
x     bdefault foreground or background

그 래서, 예를 들어 기본 설정값인 "exfxcxdxbxegedabagacad"는 일반 디렉토리의 경우, 파란색 글자(e)로 기본 배경색(x)을 바탕으로 표시되고, 심볼릭 링크(symbolic link)는 심홍색 글자(f-magenta)에 기본 배경색(x)을 바탕으로 표시되며, 뒤의 기타 속성들도 이러한 형식을 취합니다.
자세한 ls 관련 설명은 man ls로 설명서를 불러내어 읽어보시기 바랍니다.

Posted by 배고파씨

WindowsSDK Visual Studio, Visual Studio Servicepack의 일부 include되는 파일셋은 서로 설치하면서 덮어 써집니다.

 

따라서, 가장 최신에 나온 파일이 가장 나중에 덮어 써지게 설치를 해야 합니다. Visual Studio2008을 예로 들면, 설치 순서는

 

Visual Studio2008 -> Visual Studio SDK 6.1 -> Visual Studio Service pack1 -> Security Update

 

순으로 이루어 져야 합니다.

 

 

특히 예전 Embedded C++로 개발할 때 온갖 툴과 SDK셋들을 설치 했을 때는 Embedded C++툴을 Visual Studio와 함께 설치 오더를 맞추어 줘야 했습니다. 설치 오더가 틀리면, 컴파일이 안되던가, 링크가 안되던가 등등 개발자를 당황스럽게 하는 문제를 발생시킵니다.

 

 

이번에 Visual Studio 2008 Servicepack1용 보안 업데이트인 MS09-035(http://support.microsoft.com/kb/971092)를 설치했을 때 설치 오더가 맞지 않을 경우 컴파일이 안 되는 문제가 있었습니다.

 

 

만일, Visual Studio Servicepack1를 설치한 후 SDK를 설치했을 때, Servicepack1의 최신 CRT파일을 SDK6.1의 구 CRT파일로 교체 된 다음 VisualStudio2008 Servicepack1 ATL보안 업데이트를 하고 나면, vector를 사용한 소스 컴파일 시 아래와 같은 에러가 뜨게 됩니다.

 

error C2039: '_Swap_adl' : is not a member of 'std'    c:\program files\microsoft visual studio 9.0\vc\include\xutility    2764

error C3861: '_Swap_adl': identifier not found    c:\program files\microsoft visual studio 9.0\vc\include\xutility    2764

 

 

문제의 원인은 Visual Studio 2008 설치 후 Servicepack1을 설치해서 최신 CRT셋으로 교체 했지만, 그 후 SDK6.1에 있는 오리지날 Visual Studio2008 파일 셋으로 일부 CRT관련 파일이 롤백 되었고 Servicepack1용 보안 업데이트에서 교체한 CRT파일이 Servicepack1 CRT셋에서 추가된 파일을 사용하기 때문입니다.

 

 

문제 해결 방법은,

 

 

에러 메시지가 나타내주듯, C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xutility 2764라인에서 사용된 _Swap_adl의 정의를 아래와 같이 _Swap_adl사용 시점 윗부분에 추가해 주던가,

 

// TEMPLATE FUNCTION _Swap_adl

template<class _Ty> inline

void _Swap_adl(_Ty& _Left, _Ty& _Right)

{    // exchange values stored at _Left and _Right, using ADL

swap(_Left, _Right);

}

 

 

에러가 난 시점에서 Servicepack1과 보안업데이트를 순서대로 다시 설치해 주시면 됩니다.

 

 

SDK Servicepack을 설치할 때 설치 오더가 있다는 점을 분명히 알아 두시고, 설치시 Requirement부분을 참고 하시면 도움이 됩니다.

 

마찬가지 이유로, Servicepack, 보안 업데이트로 인해 최신 파일셋이 설치된 다음, SDK 인스톨파일로 SDK 복구를 하게 되면 다시 SDK파일 셋으로 롤백되니 파일셋을 복구 하실 때는 설치 오더를 고려해서 복구를 하셔야 합니다.

출처 : devpia.co.kr(데브피아 VC++ 마을)

Posted by 배고파씨
컴파일 시에 옵션 -fobjc-gc-only가 필요하다.

메소드 실행 중에 사용하는 객체는 메소드내의 자동 변수에 대입해서 사용 한다.

당분간 사용할 것 같은 객체는 외부 변수에서 참조 할 수 있도록 해둔다.

회수 대상이 되는 것은 id 타입이거나, 클래스명을 타입으로 사용하는 변수이다.

오너쉽과 인스턴스 변수에 대해 신경 쓰지 않아도 된다.

객체가 해제 될 때 필요한 후처리는 finalize 메소스에 기술할 수 있지만 가급적 사용 하지 않도록 한다.

레퍼런스 카운트 관련 메소드및 dealloc 메소드는 프로그램 안에 정의되어 있어도 실행되지 않는다.

Posted by 배고파씨
객체 중에는 해제 하면 안되는 객체도 있습니다.
예를 들어 클래스 객체(Objective-C에서는 클래스자체도 객체로 취급합니다. main 함수가 시작될때 인스턴스화 됩니다.)나 하나의 인스턴스만 만들어서 공유 하는 경우 혹은  NSString 문자열에 있는 것과 같은 객체 상수입니다.

이들 객체에 메세지 retainCount를 보내면 UINT_MAX라는 리턴값이 돌아 옵니다.
이것은 C언어 표준 라이브러리의 헤더 limits.h에서 정의된 unsigned int의 최대값 입니다.

해제 하면 안되는 객체를 정의 할 때는 클래스 정의에서 retain, release, 그리고 retainCount를 오버라이드 합니다.

구체적으로는 retain과 realease, autorealease가 아무것도 하지 않도록 오버라이드해서 레퍼런스 카운트 값이 변경 되지 않도록 합니다. 동시에 retainCount가 UINT_MAX를 리턴 하도록 만듭니다. 단 일반 적인 프로그램에서는 이렇게 정의 하는 일은 거의 없습니다.

하나의 인스턴스만 만들어서 사용하는 설계 방식을 디자인 패턴에서는 싱글톤 이라고 부릅니다. Cocoa 프레임워크에서도 이런 형태의 객체가 몇가지 있습니다. 예를 들어 애플리케이션을 제어하는 NSApplication의 객체 외에도 컬러 패널이나 프론트 패널도 하나의 객체가 공유 됩니다. 이들 클래스 에서는 shared...로 시작하는 클래스 메소드가 공유 되고 있는 유일한 인스턴스를 리턴 하도록 구현되어 있습니다.

Posted by 배고파씨