이종 언어 간에 연동(혹은, 호환)이 가능하려면 ..

익명 사용자의 이미지

프로그래밍 관련 동영상 강의를 보다가 ..
궁금한 점이 생겨.. kldp 고수님들께 여쭙고자 들렀습니다 ㅎ

아마도 제가 강사님의 말씀을 제대로 이해하지 못하고 있는 걸지도 모르겠는데요 ..
강사님의 말씀에 따르면 ..
이종 언어 간에 .. 소스 레벨의 코드들끼리는 호환이 안되지만 ..
컴파일(혹은, 어셈블) 과정에서 생성되는 .. 오브젝트 코드 레벨에서는 ..
호환이 가능하다고 하시더라고요 .
좀 더 정확히는 오브젝트 파일의 심볼을 이용하면 가능하다고 그러시는데요 ..

심볼 자체의 의미는 알고 있지만 ..
이를 .. 어떤 식으로 ... 호환이 가능하게 이용할 수 있다는 것인지에 대해 ...
구체적인 언급은 없으셔서 ...

오브젝트 코드 레벨에서의 .. 이종 언어 간 .. 호환 원리가 ..
이해가 안됩니다 .

혹시 .. 어떤 언어로 작성된 소스파일을 컴파일 하든 ..
동일한 규격의 오브젝트 파일이 나온다는 걸까요 ?

가령, 파스칼로 작성한 소스를 ... 컴파일 해 .. 오브젝트 코드가 생성되었다 치면 ..
해당 오브젝트 코드에 등록되어 있는 .. 프로시저나 전역 변수 심볼들을 ...

C로 작성하는 소스 코드에서 .. 외부 참조했다면 ..
C의 오브젝트 파일과 ... 파스칼의 오브젝트 파일을 .. 링킹해 ..
정상적인 .. 실행 파일이 나올 수 있다는 건가요 ?

근데, 오브젝트 코드 역시 .. 외부의 라이브러리에 존재하는 심볼들을 참조하는 경우 ..
링킹 단계에서 외부 라이브러리의 심볼들을 가져와 실행파일을 생성하게 되는데 ..

만약, 정말로 오브젝트 코드 레벨에서 언어 간 호환이 가능하다면 ..
결국 .. 파스칼 같은 언어로 프로그램을 작성할 때 ,.. C 라이브러리를 이용할 수 있다는 ..
엉뚱한 결론에 이를 수도 있을 것 같은데요 ..

(아무래도 제가 강사님의 말씀을 .. 잘못 이해하고 있는 것 같은데 .. ^^ ;;)

만약, 그런 식으로 TEXT / BSS / DATA 섹션에 있는 심볼들을 ..
가져다 사용하는 걸로 .. 이종 언어간 호환이 가능하다면 ..

닷넷이 .. 중간 언어까지 두어가면서 ..
언어 간의 호환을 도모할 필요가 ... 있었던 것인지도 .. 궁금해네요 ... ㅠㅠ

어렵네요 ㅠㅠ

그리고, 강사님 말씀으론 ..
오브젝트 코드 레벨에서의 심볼을 이용하면 ..
C 와 Java 간에도 호환이 가능하다는데요 ..

하지만, Java 가 컴파일을 통해 중간 파일을 생성한다 할지라도 ..
C 로 생성한 오브젝트 코드와는 규격이 다르지 않나요 ?

그러니까 ...
Java 의 경우는 byte code 로 ..
JVM 이 해독하는 데 .. 특화되어 있는 코드일 텐데 ..
C 의 오브젝트 코드와는 전혀 다르지 않나요 ?

기초 지식이 없는 탓에 .. 어렵네요 ^^ ;;

혹시 .. 좀 제대로 아시는 분 계시면 ...
쉽게 쉽게 .. 조언 좀 부탁드립니다 ㅠㅠ

긴 글 읽어주셔서 감사합니다 .

hys545의 이미지

gcc의 포트란 컴파일러인 f77(?)인가로 컴파일한 오브젝트 파일하고 c컴파일러로 만든 오브젝트 파일 링크시켜서 실행파일 만드는 게 가능합니다.
어차피 링크하는 프로그램은 같으니꺼 가능합니다

같은 오브젝트 파일을 만드는 컴파일러는 가능합니다.

즐린

익명 사용자의 이미지

강사님께 질문하세요. 더 빨리, 더 효과적인 답변을 얻으실 수 있을겁니다.

질문의 포인트가 많아서 한없이 답변이 길어질 수 있는 내용입니다.

jeongheumjo의 이미지

Java 와 C/C++ 간의 연동에는 JNI(Java 에서 지원하는 기능)
윈도우즈에서는 C/C++ 과 C#(.net) 간의 연동에는 C++/CLI(.net 에서 지원하는 기능)
가 있어서 연동이 된답니다.

JNI와 C++/CLI 의 공통점은 ISO 표준인 C/C++과의 연동을 위해 Sun 의 Java 에서는 JNI를 마소의 .net 에서는 C++/CLI 를 개발/배포 하고 있다는 것입니다.

더 자세한 것은 저도 모르네요... 저는 이정도 까지만..

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.