C언어, 서로 다른 모듈 끼리의 함수 이름이 겹칠때는 어떻게?

gurumong의 이미지

C언어를 공부하고 있습니다

만약 제3자가 제공해야하는 컴파일된 모듈을 사용해야할 필요가 있을때
그 모듈과 연관되는 헤더파일을 인쿨루드 시켜야하잖아요

그런데 서로 다른 회사에서 제공하는 2개 이상의 모듈에서
함수 이름이 겹치게 될 경우에는 이를 어떻게 해결할수 있을까요?
C언에서는 네임스페이스를 지원하지 않잖아요

나름대로 생각해보니 각기 다른 소스파일에 따로 하나씩 인쿨루드해서 사용하는 수 밖에 없는거 같은데
이런식으로 하면 자신의 소스파일이 기능적으로 묶어지지 않고 불필요하게 나누어지잖아요
이를 해결하는 좋은 방법이 있나요?

neogeo의 이미지

일단 중요한건 절대로 이름이 겹치지 않게 하는게 제일 중요합니다. 따라서 양사에 요청을 해보시는게 좋을겁니다.

이름이 겹쳤더라도 lib 파일을 직접 고쳐서 이름을 고치는게 가능한것으로 알 고 있습니다. 잘 수정해보시면 가능할지도 모릅니다. ( lib file 은 컴파일러마다 전혀 다르므로 잘 찾아보시는게 좋을 것입니다. )

#define , #undef 등을 잘 활용하시면 원하는 범위에서 함수이름을 살짝 바꿔 쓸 수도 있습니다. ( 소스 레벨에서만이겠지요. ) 이를 이용해서 함수를 잘 정의해서 골라가면서 link 가 걸리도록 할 수 있습니다.

다음으로는 이름이 겹치는게 있더라도 원하는 대로 사용하기위해선 각 모듈별의 link 순서를 잘 조정하는 수밖에 없습니다. ( 컴파일러마다 link 순서를 지정하는 법이 있습니다. ) 단순히 헤더의 include 여부만으로 어떤 함수가 어디로 link 될지는 아무도 모릅니다.

함수 이름짓는 법은 이부분을 참고하기길 바랍니다.
http://www.cinsk.org/cfaqs/html/node3.html#SECTION003100000000000000000

C 언어에서 다음표준에 namespace 넣는 것을 그래서 고려중에 있는 걸로 알고 있습니다. ( 확실한 정보는 아닙니다. 어디선가 들은거 같은데 찾아보니 잘 안보이는군요. )

Neogeo - Future is Now.

Neogeo - Future is Now.

okdongil의 이미지

object file의 경우 여러개의 object file에서
동일한 symbol name을 사용하는 경우 linker에서 에러를 발생하지만,
library file들은 먼저 link한 symbol을 사용하고 다음 library에서
동일한 symbol name을 사용하는 경우 linker에서 무시해 버리더군요.

그것 때문에 debugging하느라 엄청 고생한 기억이 있습니다.
여러 회사의 solution을 사용하는 project여서요.

결국 한 회사에 연락해서 이름을 바꾸었지요.

결론적으로 여러 library에서 함수 이름이 겹칠 경우 compile link는 될지 모르나
run time에서 이상동작 합니다.

이것을 compile level에서 발견할 수 있는 방법을 찾았지만
아직 못 찾았어요.

댓글 달기

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