Visual Studio 2008에서 모듈 프로그래밍 할 때요...
글쓴이: morethanair / 작성시간: 목, 2009/01/08 - 6:06오후
외부 변수를 사용해서 각 프로젝트 간에 변수에 접근할 수 있도록 할 예정입니다.
IDE----- Proj A ------ Define idata
|
-- Proj B ------ Use idata
이런 구조로 일단 만들었습니다.
Proj A는 외부변수를 선언하는 부분이니 컴파일이 일단 잘 되었습니다.
그런데 Proj B를 컴파일 하는 동안에 Link error가 발생합니다.
외부변수 idata가 있는 것을 참조를 하지 못해서 그런 것 같은데요.
Proj A의 어떤 파일을 참조해야 제대로 링크를 시킬 수 있나요?
또 Proj B의 어디서 그걸 세팅해야 하는지도 좀 알려주십시오.
감사합니다.
Forums:
프로젝트는 각각의
프로젝트는 각각의 진입점을 갖지 않나요?
님이 말씀하시는 일(전역 변수 공유)은 한 프로젝트 내의 서로 다른 소스 코드 단에서 하는 일인 것 같습니다.
a.cpp
int a;
a.h
extern int a;
b.cpp
#include "a.h"
// a를 사용한다
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
답변 감사합니다
제가 포트란 프로젝트에서 다음과 같이 외부 변수를 선언했습니다.
!DEC$ ATTRIBUTES DLLEXPORT::idata
integer idata,in
common / idata / idata
그리고 씨 프로그램에서 이 변수를 사용하려고 그냥 선언만 했는데요.
extern int idata;
int _tmain(int argc, _TCHAR* argv[])
{
idata=100;
return 0;
}
여기서는 그냥 선언만 해둔 거니깐 컴파일이 되어야 하는데 링크 에러가 다음과 같이 납니다.
오류 1 error LNK2001: "int idata" (?idata@@3HA) 외부 기호를 확인할 수 없습니다. CConsole.obj CConsole
왜 그런지 모르겠네요...ㅠ.ㅠ
Toward him...
More Than Air
포트란 프로젝트가
포트란 프로젝트가 어떤식으로 컴파일되고 linking 되는지는 잘 모르겠지만, 단순히 C 에서 이름만 써두었다고 runtime 에 binding 되진 않습니다.
컴파일할때 포트란 프로젝트로 만드신 obj 나 share obj 를 반드시 함께 link 에 추가해 주셔야 제대로 외부기호가 확인되어 C 에서 성공적으로 link 가 될 것입니다.
현재 C 에서 선언만 해두신게 아니라
'main 함수안에서 값을 assign' 하므로 idata 를 사용하고 계신것이며, 이를 위해선 idata 의 link 가 반드시 되어야 합니다.
Neogeo - Future is Now.
Neogeo - Future is Now.
혹시...
혹시 tmain()함수가 들어있는 프로그램이 cpp로 되어 있는 것은 아니겠죠?
이렇게 되어 있다면 extern "C"로 선언을 해 주셔야 될 듯합니다.
프로젝트 종속성을
프로젝트 종속성을 먼저 확인 해 보시구요.
(Proj A --- Define idata) 프로젝트가 정적 라이브러리 프로젝트 인가요?
dll 이나 exe 프로젝트라면 저런식으로는 안될것 같네요.
답변 감사드립니다.
일단 위에서 말씀해주신 것처럼 obj 파일을 링크해보고(어디서 해야하는지는 좀 더 찾아봐야겠네요. lib 링크하는 곳은 아는데...;) cpp파일이니 extern "C"도 해봐야겠습니다.
cynicjj님 말씀대로라면 위에 두 가지를 해줘도 동적 링크로는 할 수 없다는 말씀이신가요? 흠... 그렇다면 좀 무섭군요...ㅠ.ㅠ
답변주신 분들 다들 감사드립니다.
Toward him...
More Than Air
댓글 달기