정말 많은 이유로 Visual Studio 를 싫어 하는 이유중, 그중 하나가 바로 위 이미지처럼 나오는 뭔가의 DLL 이 없어서 오류가 나는 경우 입니다.
멍청한 M$놈들이 지들이 만든 DLL 의 참조 오류가 많아지자, manifest 개념을 도입해서 DLL 특정 위치 해결 점을 어찌저찌 해 보고자 해 놓고선, 컴파일러 자체가 Visual Studio 에서 개발에서 쓰는 DLL 이 없으면 표준 WindowsAPI 로 도는 프로그램이 돌지도 못하게 해 놓은 것이죠.

M$ 개발자들이 편하니, 사용자가 되는 VS 개발자가 개노가다 해야 하는 겁니다. 참으로 븅신같은 현상이 아닐수가 없죠.

분명히 프로젝트를 표준 Windows API 만을 사용하는 프로젝트로 만들어도, 저놈의 알수도 없는 DLL 참조 오류는 저를 절망의 늪으로 끌고 가기에, 그냥 컴파일러를 gcc 로 변경 하였습니다.

프로그램 자체를 리소스 다이얼로그 생성 방법을 사용했을 뿐 인데다, 내부 프로그래밍도 모두 WIN API 사용만을 하도록 하고, c++ 의 std 라이브러리만 사용 했으니, 약간의 컴파일러간의 차이점만 적용 하면 컴파일이 가능 했습니다.

이번에 안 것이지만, 표준 std::fstream 이 Visual Studio 와 gcc 가 다르더군요.
개발자가 쓰기는 Visual Studio 가 편하지만, 이게 C++ 표준이 아닌 M$ 가 지들 맘대로 바꾼 것인걸 아니 더욱 더 기가 찼습니다.
하나부터 열까지 다 자기들 맘대로인 M$ 에게 정말 경의를 표하는 바 입니다.

이런 경우 때문에 저는 개발자가 편하면 사용자에게 죄를 짓는 짓이다. 라고 하는 것 입니다.

그런이유로 .. MFC 개발자님들에겐 죄송하지만, 전 MFC 를 경멸합니다.

어쨋든.
CodeBlocks 의 import 로 Visual Studio Solution 파일을 import 후, DEBUG 나 UNICODE 등의 #define 을 컴파일러 옵션에 지정하였습니다.
내부에 다국어 지원 문제로 BOM 헤더가 있는 cpp 파일을 gcc 가 컴파일 하지 못하는 문제 때문에 gcc 프로젝트만 별도로 다국어 문자열 저장 코드를 BOM 헤더가 없는 UTF-8 형태로 다른 이름 저장 하여, 프로젝트에서 해당 파일을 교체 하여 컴파일 하도록 하였습니다.
나중에 VS 에서 수정하면 해당 파일도 함께 수정 해야 하는 것 이지만, notepad++ 에서 전체 복사, 붙이기로 한번씩만 해 주면 되니 이정도 고생은 좀 감수 해야 하겠지요.. (아싸리 망할놈의 M$ Visual Studio 를 아예 안쓰고 싶습니다만 ...)

다 됐다 싶어 빌드를 하니 .. 어라! 이건뭔가요?
왠 리소스 오류가 납니다.

RC 가 오류라니 ..
혹시 unicode 인가 해서 보니 그냥 ANSI 입니다.
외국 포럼을 돌아 보니, 역시 해답이 있더군요.
 
Codeblocks 에서 RC 컴파일시, 옛날 명령어 사용으로 일부 RC 파일을 컴파일 하지 못하는 경우가 있었습니다.
그래서 저는 다음과 같이 컴파일 옵션을 직접 제가 주도록 변경 하였습니다.

문제가 되는 부분은 include 되는 directory 참조 명령어 -I 뒤에 오는 부분이 다음과 같이 지정되어 있습니다.

$rescomp -i $file -J rc -o $resource_output -O coff -Isrc -Ires -Ilib 


이걸 다음과 같이 directory 참조 구문으로 지정해 줘야 합니다.

$rescomp -i $file -J rc -o $resource_output -O coff -I.\src -I.\res -I.\lib 


이는 실제 CodeBlocks 의 오류라기 보단, minGW 에 포함되는 windows RC compiler 인 windres.exe 의 오류라고 하는군요.
혹시라도 저처럼 리소스 컴파일에 이유를 못 찾고 포기하려는 분이 계시다면, 위와 같이 직접 컴파일 옵션을 변경해서 만들도록 해 보시길 바랍니다.
 
Posted by 견족자K rageworx
  • Favicon of https://sayheart.tistory.com BlogIcon sayheart
    2013.01.08 15:19 신고

    이와 관련된 문제가 있는 분들을 위해
    windres/ r6034/ manifest 만드는 방법을 한번 찾아봤습니다.

    manifest는 dll의 중복 및 충돌을 피하며. UAC와 같은 관리자 권한과.
    빌드 체계화등을 위해 설계된 방식으로 보여지지만...
    이미. 프로그램 속성 정보에 이미 모두 있습니다. 리소스에 Version Info가 있고.
    그것이 속성정보와도 연결되는데... 굳이 사용하는 이유는. VS 6.0을 버리고.
    새로운 IDE 툴로 서비스 하기 위한. 판매 정책으로 여겨집니다.

    말씀하신대로. 정말. 별로입니다.
    역시. VS 6.0이 최고입니다.


    //R6034에 대한 여러가지 해결 방식을 찾아봤습니다.
    환경 설정
    http://tring.tistory.com/174

    재배포 설치 패키지
    http://www.microsoft.com/ko-kr/download/details.aspx?id=29

    닷넷 프레임 워크나 서비스팩 설치
    http://social.msdn.microsoft.com/Forums/en-US/vssetup/thread/6a50376a-882e-458f-a20b-b45a832428bb

    시스템 복원
    http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=69219236&qb=UjYwMzQ=&enc=utf8&section=kin&rank=2&search_sort=0&spq=0

    포맷 하세요
    http://kin.naver.com/qna/detail.nhn?d1id=2&dirId=203&docId=117182969&qb=UjYwMzQ=&enc=utf8&section=kin&rank=5&search_sort=0&spq=0

    manifest 추가해라
    http://blog.naver.com/vblue3?Redirect=Log&logNo=120036516048

    WinSys - Lua Script R6034
    http://linkmemo.tistory.com/13

    http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/thread/3964406a-b984-40a9-8cbb-7a89fbff6339
    http://blogs.msdn.com/b/cheller/archive/2006/08/24/718757.aspx

    해킹을 통한 리소스 수정
    http://bulkdisk.tistory.com/36

    프로젝트 새로 생성
    http://yango.tistory.com/142

    라이브러리 통합
    http://blog.naver.com/ujinyang?Redirect=Log&logNo=140055016706

    다양한 에러 형태
    http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/56ff4a47-f89c-4f13-b0b7-d608e56e4e46

    manifest 만드는 방법
    http://geniuswhite.tistory.com/28
    http://blog.naver.com/boribab73?Redirect=Log&logNo=80062977998
    http://blog.naver.com/ducbin?Redirect=Log&logNo=90009634101
    http://thepassion.tistory.com/15
    http://thepassion.tistory.com/15
    http://arumizz.blog.me/70105626892
    http://cafe.naver.com/hopistudy/159
    http://cafe.naver.com/cafec/215606
    http://blog.naver.com/blaze_terran?Redirect=Log&logNo=140044340023

    필요한 서비스팩 링크
    http://cafe.naver.com/zzzzzzero/113

    XP Theme 나 skin등에도 사용되네요.
    http://blog.naver.com/blaze_terran?Redirect=Log&logNo=140044340023

    publicKeyToken 생성하기 : dll을 통한 인증'에도 사용되어지는것으로 보입니다.
    //vs 6에서는 sn이나 닷넷 프레임워크에서 지원하는 key를 사용해도 좋을지 모르겠습니다.
    http://khihome.blog.me/40167264962
    http://blog.naver.com/al8bright?Redirect=Log&logNo=20154388443
    http://sudean.tistory.com/5
    http://it-developer.tistory.com/346
    http://msdn.microsoft.com/en-us/library/ms125692.aspx
    http://www.codeproject.com/Articles/8874/Strong-Names-Explained

    • Favicon of https://rageworx.pe.kr BlogIcon 견족자K rageworx
      2013.01.08 17:15 신고

      뭔가 잘못 읽고 글을 다셨군요.
      1. VC6.0 도 MFC 입니다. 이건 더 쓰레기 입니다.
      2. .NET framework 는 MFC 보다 더한 쓰레기 입니다.
      3. 댓글 다신 건 manifest 연결 법 입니다. 제가 쓴 글은 gcc 에서 컴파일시 참조 lib 연결법 입니다.
      4. manifest 와 version info 는 별개 입니다. (resource 의 한 종류일 뿐)
      5. 위의 이유로 전혀 상관 없는 Visual Studio 관련 글을 쓰셨습니다.
      6. 고로 댓글을 전혀 엉뚱하게 잘못 달으셨네요.

    • Favicon of https://rageworx.pe.kr BlogIcon 견족자K rageworx
      2013.01.08 17:16 신고

      대체 왜 gcc 컴파일 글에 Visual Studio 글을 쓴건지 이해가 안가네요.

  • Favicon of https://sayheart.tistory.com BlogIcon sayheart
    2013.01.11 18:39 신고

    저는 visual studio 6.0 만 사용해서 개발해 왔습니다.
    제가 아는게 visual studio 6.0 밖에 없어서.
    나름 충실한 내용을 달았습니다.

    필요없으시면. 지우셔도 상관없습니다.

    그리고. 이와 관련된 자료를 찾아 봤습니다. 라고 적혀 있습니다.
    잘 읽어 보세요.

    visual studio 6.0은 최고의 IDE입니다.
    쓰레기들과는 차원이 다르다는걸. 8년이상 개발해본 저는 분명히 압니다.

    //
    참고로 오늘도 밤세워 일하는 IT노동자들을 위해서. 야근 없애기 운동을 적어 봅니다.
    정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

    • Favicon of https://rageworx.pe.kr BlogIcon 견족자K rageworx
      2013.01.11 22:31 신고

      sayheart 님. VS 6.0 에서 사용하는 C++ 규격이 잘못 되어 있고, 또한 이 컴파일러 성능이 현재 x86 CPU 에 맞지 않음은 물론. 이 컴파일러가 얼마나 오만한지를 아직 모르시는거 같아 안타깝군요.
      마치 "난 Java 말곤 몰라", "난 C# 말곤 몰라" 라고 하는 개발자와 다를게 없다면 무척 무책임 한 발언이라 생각 합니다.
      저는 개발을 한지 벌써 15년이 넘었습니다.
      그리고 초창기 VS6.0 쓰면서 느꼇던 편리함들이 지금 얼마나 오만하고 멍청한 생각이었는지를 2000년 들어서야 알게 되었지요.
      VS6,0 를 쓰면서 이후의 VS 번젼들이 나쁘다고 하는건 정말 아닌듯 하네요.
      부디 MFC 개발자들의 오만으로 인해, 표준 C/C++ 이해를 못해 타 플랫폼에서 아무것도 못하는 그런 개발자가 되지 마시길 바랍니다.

      최고의 IDE 를 VS6.0 이라고 하실게 아니라.
      최고의 컴파일러를 생각 하는 것이 더 중요하지 않을까요?
      IDE 는 Code::Blocks 로 쓰는게 더 편리합니다.

    • Favicon of https://rageworx.pe.kr BlogIcon 견족자K rageworx
      2013.01.11 22:46 신고

      그리고 달아 주신 성의가 있는데 함부로 댓글을 지우진 않겠습니다. ( 그럴 필요도 없구요 ! )
      Visual Studio 쓰시는 다른 분들이 manifest 문제 점 찾다 sayheart 님 댓글을 볼수도 있는 것 이니까요 :)

  • Favicon of https://sayheart.tistory.com BlogIcon sayheart
    2013.01.12 10:12 신고

    저는 manifest나 uac나 openssl. mpeg. mp3 등으로 기술의 획일화 되는 현상'
    오픈소스라는 명목아래. 보편성이 독과점으로 자리잡는 gpl
    상용 제품으로 독과점이 되버리는 윈도우OS

    이런것들이 사람들의 자유를 가로 막는다고 생각되고.
    기술적 제약으로 개발자들에게는 야근을 주고.
    소비자들에게 불필요한 인생의 낭비를 만드는 잘못이라 생각합니다.
    물론. 이것으로 생계를 이어가는 엔지니어들에게는 중요한 소득원이 될지도 모릅니다.

    그렇지만. 잘못된 노력으로 서로의 시간과 노력을 앗아가는 이런 뻘짓은
    쓰레기라고 단언하고자 합니다.
    그래서 저는 반대합니다. 어렵고. 불편합니다. 편리하다 하더라도. 자유롭지 않습니다.
    그런데도. 저는 좀 더 다양하고. 자유로운 환경이 만들어지기를 바랍니다.

    MS가 메니페스트 정책을 사용하는것은 대화의 근절'이라고 생각됩니다.
    얼핏보니. 안드로이드에서도 이런 정책을 사용하는것으로 보이던데요.
    그냥 파일 속성으로 해결해도 될일을...
    굳이 이렇게 인증화 하는것은 보안업계의 권력 남용이라 생각됩니다.

    UAC나 openssl과도 연관되고. 서버운영시 SSL 인증을 법률로 지정 한것도 그렇습니다.
    가장 큰 이유는. 몰아주기식이라 여겨져서. 사용하기 꺼려집니다.

    제가 몰라서 그러지만. 각종 스펨과 바이러스'에 대한 대처 방안이 이보다 나아지려면.
    최소한 국민학생도 알 수 있을 정도의
    메니페스트 정책 관리 도구'나 문서'를 제공해야 하는게 맞다고 생각됩니다.
    근본적으로 저는 인증의 독점화나 관리화. 수익화보다는 자율화. 도움화.되기를 바랍니다.

    //저는 IT가 이랬으면 좋겠습니다. - 사실 찾아보면 이미 다 있습니다.
    -. 누구나 알 수 있는 도구.와 문서. 형식.의 제공과 공유.
    -. 소스의 상업화. 공개. 비공개의 자율화.

    투명성이 보장되면. 그것은 확실해진다고 생각됩니다.
    사람들은 분명히. 좋은것을 위해 노력할것이라 생각합니다.

    이러면. 수익 시장이 적어 지고. 관리와 통제가 안될것 같지만.
    사람이 사람을 돕게 되는 시장이 만들어질것으로 예상됩니다.

    • Favicon of https://rageworx.pe.kr BlogIcon 견족자K rageworx
      2013.01.14 11:03 신고

      네 ... 솔찍히 무슨말을 쓰시는건지 잘 모르겠지만, 열심히 사시는것 같아 보기 좋네요.
      뜻 이루시기 바랍니다 :)