오류
/usr/bin/ld: cannot find -lsocket
collect2: ld returned 1 exit status
make: *** [opbroker] 오류 1

해결책
소켓 함수를 컴파일 하기 위헤 필요한 라이브러리 이름은 아직 표준화 되지 않았다.
Sun Solaris 에서는 -lsocket -lnsl 라이브러리 옵션을 필요로 한다.
Linux 의 경우는 단순히 -lnsl 옵션을 필요로 하고, Mac OS X의 경우 외부 라이브러리를 필요로 하지 않는다.
메뉴얼 페이지에서 사용해야할 라이브러리 이름을 확인하자..!!!

네이버!!!
ld는 링커입니다. 일단 메시지로 봐서는 ld가 동작은 했습니다.

문제는 -lsocket인데... 컴파일이나 링크시에 -L 옵션을 사용하지 않으셨으면..

/usr/lib 디렉토리의 라이브러리를 찾게 됩니다.

-l 옵션은 뒤의 라이브러리를 찾는데 libsocket.(라이브러리 확장자) 의 파일을 찾습니다. 확장자로는 a, la, so, sl 등이 사용됩니다.

그래서 -lsocket은 /usr/lib/libsocket.(라이브러리 확장자)를, -lnsl은 /usr/lib/libnsl.(라이브러리 확장자)를 가리킵니다. 만약 -L 옵션을 사용했으면 다른 디렉토리도 뒤집니다. 예를 들어 -L/usr/local/lib을 쓰셨다면 앞에서 언급한 패스 이외에 /usr/local/lib/libsocket.(라이브러리 확장자) 와 /usr/local/lib/libnsl.(라이브러리 확장자) 를 찾게 됩니다.

-lsocket과 -lnsl을 쓰신 것으로 봐서는 솔라리스에서 컴파일을 하시는 듯 한데 솔라리스가 아닌 다른 OS에서 컴파일을 하신다면 옵션을 빼주시면 됩니다.
Tag |

익스플로러의 힘은 막강하다.

무려 보기->인코딩 에서 선택되는 방식에 따라서 시스템 전역으로 영향을 끼친다. 어설프게 설정했다가는

한글의 깨진 글씨만을 보게 된다. 아 윈도우~ -_-...

이 문제를 전에 어느 블로그에서 VS 2005에서 한글로된 프로젝트를 실행하지 못하는 문제를 해결하는 법을 보지

않았다면 개고생, 뻘짓을 할 뻔 했다.. 기억은 안나지만 그분에게 고마울 따름이다.

한글이 깨지거나 열리지 않거나 등등이 상황이 발생되면 무조건~ 익스플로러의 보기->인코딩 먼저 보자..ㅠ_ㅠ...

Tag |

포인터 변수의 임시변수 문제.

from Study/Error 2007/11/07 12:21 view 18183
아래와 같이 소켓이 생성될때 소켓을 복사해주고 소멸시킬때 close 해줄 때 임시변수는 큰 문제가 된다.

CClientSocket::CClientSocket( SOCKET client )
: m_client( client )
{
}

CClientSocket::~CClientSocket(void)
{
    Disconnect();
}

void CClientSocket::Disconnect()
{
    if( m_client == INVALID_SOCKET )
        return;

    closesocket( m_client );
    m_client = INVALID_SOCKET;
}


vector<CClientSocket> g_Clients;

       SOCKET client = server.Accept(&clientInfo);
        assert( client != INVALID_SOCKET );

        g_Clients.push_back( client );
=> push_back 할때 임시 변수가 생성되는데 이때 생성자가 또 호출되게 된다. 그리고 사라진다.
이것이 문제다. client는 서로간의 참조관계가 되므로 같이 죽게 된다. client는 SOCKET이고 g_Clients는 CClientSocket 이므로 암시적인 형변환이라고 해야하나 이를 위해 임시변수가 생성되는것이다.

vector<SOCKET> g_Clients;
=> 그런데 SOCKET으로 한다면 죽지 않는다. 임시변수를 생성하지 않아서 그런거 같은데 -_-.. 모르겠다. 


 소멸자에서 특정 포인터를 닫을 경우엔 조심 또 조심하자. 임시변수가 생성되도 소멸자가 호출되니깐.!!
Tag |

링커 도구 오류 LNK2005

from Study/Error 2007/10/23 10:38 view 25630
1. 헤더 파일에 선언과 정의를 동시에 할때 발생 할 수 있다. obj 링크 중복!!

  - 해결법 ( 프로젝트 속성 - 링커 - 명령줄 - /FORCE:MULTIPLE 입력 ) 무시하기-_-..

more..

Tag | ,

 프로세스나 스레드를 생성후 CloseHandle을 해서 레퍼런스 카운트를 1로 만드는건 좋은데...

나중에 핸들을 사용해서 다른 작업을 하고자 할 때 에러 체크를 안해 준다면.. 왜 에러가 났는지 찾기 힘들다.

ㅠ_ㅠ... 그러니깐 닫을땐 쓸일이 있는지 한번 생각해보자..

Tag | ,

_imp_ 찾을수 없다.

from Study/Error 2007/10/13 10:07 view 15895
대체로 이런에러는 import함수 없다는 말이므로 라이브러리 추가를 제대로 했는지 찾아본다.

TransprentBlt() = > msimg32.dll 을 추가해준다.
Tag |
#define _WIN32_WINNT 0x0501
 
컴파일러에게 NT시스템이란걸 알려줘야 하지 않을까~



Tag |

재배포 문제

from Study/Error 2007/10/07 10:09 view 18228

1. 방법 : XCopy를 사용하여 배포.
   요약 : C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86 안의 맞는 폴더를 포함하여 배포-_-..

2. VS2005에서 제작한 .exe이 같은 에러가 나올 때.

응용 프로그램 구성이 올바르지 않기 때문에 이 응용 프로그램을 시작하지 못했습니다.
이 문제를 해결하려면 응용 프로그램을 다시 설치하십시오.

more..

Tag | ,

error C2039: WSAEventSelect

from Study/Error 2007/06/25 16:01 view 16477

error C2039: 'WSAEventSelect' : is not a member of '`global namespace''

error C2065: 'WSAEventSelect' : undeclared identifier

VS 6.0 의 MFC 은 Winsock 1.1 이다. -_-..

2005의 경우는 Winsock 2.2 이상(?) 이라 WSAEventSelect 가 잘 먹혀 들어간다.

그래서 번거롭지만 이와 같은 작업을 해줘야 한다. 링커에 ws2_32.lib 추가!!

  1. StdAfx.h 파일에서 #include <afxsock.h> 대신에 #include <winsock2.h> 추가.
  2. App클래스에서 기존 소켓을 초기화 해주는 부분을 주석처리.

    //     if (!AfxSocketInit())
    //     {
    //         AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
    //         return FALSE;
    //     }

  3. 라이브러리를 초기화 해주면 자~알(?) 돌아간다.

             WSADATA wsa;
             WSAStartup( MAKEWORD(2, 2), &wsa );

Tag |

fclose, free 어이 없는 실수...

from Study/Error 2007/04/09 21:11 view 15792

FILE *fp = fopen("..", "r");

해놓고 free(fp); 를 하지 않나

int *ar = (int *)malloc(sizeof(int));

해놓고 fclose(ar); 을 하고 ...'보내지 않음'창만 계속 탓하고...

"나 바보 아냐???"

Tag |