C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[51965] Re:Re:Re:[질문] _msize()사용시 에러가 나네요
열씸! [cappuccino] 2216 읽음    2008-01-18 15:11
아 project\lib 인걸로 착각했군요.
하지만 #pragma라고 한건 CG32.LIB를 추가하란 소리가 아니었습니다.

[Linker Error] Unresolved external '___org__msize' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CG32.LIB|_msize
[링커 에러] c:\program files\borland\cbuilder6\lib\cg32.lib 에서 사용된 _msize 외부 함수가 있는디 링크할때 찾아봐도 실체가 없더랏.

이란 소리니 cg32.lib는 있는데 _msize에 필요한 라이브러리의 링크가 없단 소리잖아요? 당연히 이미 cg32.lib가 존재하고 그걸 링크하다 에러났는데 cg32.lib를 링크한다고 달라지는건 없겠지요.

_msize는 MSC에서 지원하는 함수라 그다지 써 본적 없지만,
프로젝트 옵션에서 Use dynamic RTL 을 체크하시면 링크엔 문제가 없으실것으로 보입니다.
다만 해당 프로그램을 배포하실때 필요한 CRT들을 함께 배포하셔야 하는 문제가 있을껄로 보이네요.

굳이 빌더에서 _msize를 쓰셔야 하신다면,
저라면
#define msize(m) (*((int*)m - 1) - 2) 라고 선언해서
_msize함수가 아닌 매크로로 적당히 처리해 버릴것 같네요. (속도도 빠르고 좋잖아~)
malloc 메카니즘은 할당된 메모리 앞에 할당된 용량이나 (플랫폼에 따라 패러그래프 단위 혹은 다른 블럭단위)의 용량을 기재하게 마련이니까요

    char *a = (char *)malloc(100);
    #define msize(m) (*((int*)m - 1) - 2)
    Caption = AnsiString(msize(a)) + ":" + _msize(a);
    free(a);
이런식으로 코딩해 보시면 매크로로 만든 msize와 마이크로소프트의 런타임라이브러리 함수인 _msize가 동일하게 동작하는걸 확인하실 수 있을겁니다.

younkwan 님이 쓰신 글 :
: 콤포넌트로 만든건 아닌데요..
: 그냥 새 프로젝트 하나 만들어서 Form1에 버튼을 클리하면 동작하도록 해도 안되고
: 프로젝트의 WinMain()에서 해봐도 안됩니다.
: 그리고 #pragma comment(lib, "CG32.LIB") 추가해도 안되네요...ㅠㅠ
:
: 열씸! 님이 쓰신 글 :
: : 컴포넌트로 만드셨나보군요. CG32.LIB라는.
: : 컴포넌트는 하나의 LIB라, LIB라는건 하나의 실행화일과 달리 모든 구성요소를 포함시킬 강제가 없습니다.
: : 즉, 이경우 msize 함수를 사용하긴 했지만, 함수의 호출 내용만 들어 있을뿐 라이브러리가 포함되지 않아서
: : 발생하는 경우겠지요.
: : 두 가지 해결방법이 있습니다.
: : 하나는 실행화일을 만드는 프로젝트에도 msize함수를 한번 호출해서 라이브러리가 링크 되게 하는 방법
: : (#pragma comment(lib, "화일명") 로 직접 지정해 줘도 되겠지만)
: : 또 하나는
: : 컴포넌트 쪽에 #pragma package(smart_init) 넣거나 빼 보시기 바랍니다.
: : 어떤 구조로 작성하셨는지 몰라 그냥 대강 답변해 드립니다.
: :
: : younkwan 님이 쓰신 글 :
: : : malloc로 할당된 메모리의 크기를 구하려고 _msize함수를 사용했습니다.
: : : 근데 컴파일시 Linker error에러가 발생합니다.
: : : 원인이 뭔가요?
: : :
: : : [Linker Error] Unresolved external '___org__msize' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CG32.LIB|_msize
: : :
: : :
: : : void test ()
: : : {
: : :     char *b;
: : :
: : :     b = (char *)malloc(100);
: : :     Caption = AnsiString().sprintf("size=%d", _msize(b));
: : :     free(b);
: : : }

+ -

관련 글 리스트
51944 [질문] _msize()사용시 에러가 나네요? younkwan 1429 2008/01/18
51958     Re:[질문] _msize()사용시 에러가 나네요? 열씸! 1548 2008/01/18
51959         Re:Re:[질문] _msize()사용시 에러가 나네요 younkwan 1357 2008/01/18
51965             Re:Re:Re:[질문] _msize()사용시 에러가 나네요 열씸! 2216 2008/01/18
51966                 Re:Re:Re:Re:[질문] _msize()사용시 에러가 나네요 이윤관 2417 2008/01/18
51969                     Re:Re:Re:Re:Re:[질문] _msize()사용시 에러가 나네요 열씸! 2142 2008/01/18
51972                         감사합니다. 이윤관 1229 2008/01/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.