Visual Studio 2008에서 모듈 프로그래밍 할 때요...

morethanair의 이미지

외부 변수를 사용해서 각 프로젝트 간에 변수에 접근할 수 있도록 할 예정입니다.

IDE----- Proj A ------ Define idata
|
-- Proj B ------ Use idata

이런 구조로 일단 만들었습니다.

Proj A는 외부변수를 선언하는 부분이니 컴파일이 일단 잘 되었습니다.

그런데 Proj B를 컴파일 하는 동안에 Link error가 발생합니다.

외부변수 idata가 있는 것을 참조를 하지 못해서 그런 것 같은데요.

Proj A의 어떤 파일을 참조해야 제대로 링크를 시킬 수 있나요?

또 Proj B의 어디서 그걸 세팅해야 하는지도 좀 알려주십시오.

감사합니다.

cppig1995의 이미지

프로젝트는 각각의 진입점을 갖지 않나요?

님이 말씀하시는 일(전역 변수 공유)은 한 프로젝트 내의 서로 다른 소스 코드 단에서 하는 일인 것 같습니다.

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.

morethanair의 이미지

제가 포트란 프로젝트에서 다음과 같이 외부 변수를 선언했습니다.

!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

neogeo의 이미지

포트란 프로젝트가 어떤식으로 컴파일되고 linking 되는지는 잘 모르겠지만, 단순히 C 에서 이름만 써두었다고 runtime 에 binding 되진 않습니다.

컴파일할때 포트란 프로젝트로 만드신 obj 나 share obj 를 반드시 함께 link 에 추가해 주셔야 제대로 외부기호가 확인되어 C 에서 성공적으로 link 가 될 것입니다.

현재 C 에서 선언만 해두신게 아니라

'main 함수안에서 값을 assign' 하므로 idata 를 사용하고 계신것이며, 이를 위해선 idata 의 link 가 반드시 되어야 합니다.

Neogeo - Future is Now.

Neogeo - Future is Now.

shlee의 이미지

혹시 tmain()함수가 들어있는 프로그램이 cpp로 되어 있는 것은 아니겠죠?
이렇게 되어 있다면 extern "C"로 선언을 해 주셔야 될 듯합니다.

cynicjj의 이미지

프로젝트 종속성을 먼저 확인 해 보시구요.

(Proj A --- Define idata) 프로젝트가 정적 라이브러리 프로젝트 인가요?

dll 이나 exe 프로젝트라면 저런식으로는 안될것 같네요.

morethanair의 이미지

일단 위에서 말씀해주신 것처럼 obj 파일을 링크해보고(어디서 해야하는지는 좀 더 찾아봐야겠네요. lib 링크하는 곳은 아는데...;) cpp파일이니 extern "C"도 해봐야겠습니다.

cynicjj님 말씀대로라면 위에 두 가지를 해줘도 동적 링크로는 할 수 없다는 말씀이신가요? 흠... 그렇다면 좀 무섭군요...ㅠ.ㅠ

답변주신 분들 다들 감사드립니다.

Toward him...
More Than Air

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.