정태영

애플 개발자들은 flex 를 사용하지 않나봅니다. lex & yacc 를 사용해보고 있는데 os x 에 기본으로 있는 flex 때문에 한참 삽질했네요. 기본으로 제공되는 flex 를 이용할 경우 _main symbol 이 multiple definition 되었다고 에러가 나게 됩니다.

혹시나 기본으로 제공되는 flex 가 잘못 빌드되어있는게 아닐까 싶어서 gentoo osx 를 이용해서 새로 빌드했더니 잘되는군요. 애플 미워요!

.
.
.

나중에 알고보니 제가 flex 를 잘못 사용한 것이었네요. flex 등의 경우 yyin, yywrap 등의 input 과 terminal 을 만났을 때 해야할 행동 등을 따로 정의해주지 않은 상황에서도 테스트가 가능하도록 test stuff 를 제공합니다. lex library 와 link 가 필요한 건 이 경우 뿐인데, 제가 모르고 -ll 플래그를 붙였기 때문에 생긴 문제였네요.

Tags: , , ,

This entry was posted on Wednesday, May 24th, 2006 at 2:08 am and is filed under macintosh. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

3 Responses to “os x: bug? in flex.a”

  1. [..'] Says:

    애플에 버그 리포트 부탁드립니다. 말 안해주면 예내들 안고쳐요. 말해줘도 안고치기도 하지만…

  2. han9kin Says:

    예전에 os x에서 flex를 사용한 적이 있는데요. 저는 그런문제가 없었습니다.

    _main multiple definition에러가 났다면 컴파일하실 때 -ll이나 -lfl 옵션이 붙어있어서 그런 것 아닌가요?
    lex/flex에서 main함수가 없어도 돌려볼 수 있도록 stub main함수를 libl, flex의 경우 libfl로 기본 제공되거든요.
    flex자체는 문제가 없을 것으로 생각되는데요?

  3. 정태영 Says:

    han9kin // 아 감사합니다 :) libl, liby 등을 링크시키지 않으면 symbol 몇 가지를 못 찾아서 링크를 시켜야 하는줄 알았는데 그게 아니었군요. 하지만 재밌는건 따로 설치한 flex 를 이용하면 libl, liby 와 링크가 되어도 문제가 없었다는 점입니다 ;)

    하튼 저 문제는 제가 yyerror 랑 yywrap, yyinput 등을 직접 정의해주고 libl, liby 등과 링크시키지 않는 게 답이었네요.

Leave a Reply