2016-10-15 2 views
0

Flex와 들소 자신의 main 함수를 정의, 그래서 라이브러리 libflliby 내 코드를 컴파일 할 때, ldmain이 여러 번 선언되기 때문에 연결하지 않으려는 정의. 이 문제를 어떻게 해결할 수 있습니까?Flex와 들소 자신의 '주요'기능

답변

3

libflliby 모두는 main 정의하지만 링크 명령 마지막으로 항상 퍼팅 라이브러리의 불변 규칙을 사용 (또는 연결 한 단계에서 컴파일하는 경우 명령을 컴파일)이라면 그들은 어떤 문제를 야기해서는 안 . (즉,하기 전에 연결하는 객체 또는 소스 파일을 -lfl -ly을 넣어하지 않습니다.) 당신이 중 하나를 정의하거나 yywrap을 억제하지 않는 경우에만 libfl 필요

참고. flex를 사용 중이고 yywrap 기능이 필요하지 않은 경우 플렉스 입력 파일에 %option noyywrap을 추가하고 libfl을 잊어 버리십시오.

또한 liby을 필요로하지 않아야합니다. main 외에도 yyerror을 정의합니다. 그러나 라이브러리는 항상 필요하지 않으므로 항상 yyerror을 정의해야합니다.

libflliby은 빠르고 편리한 테스트 또는 해킹을 작성하는 데 도움이되는 "편리한"라이브러리입니다. 생산 코드는 그것들에 의존해서는 안됩니다. 그들이 추가하는 기능은 십여 라인 이하의 매우 유용한 코드로 구성됩니다.

+0

참고 : 라이브러리를 마지막으로 배치하는 순서 (및 라이브러리 순서)의 결과로 링커는 다음 라이브러리에서 아직 해결되지 않은 기호를 검색합니다. 즉, 발견 된 심볼의 첫 번째 발생을 사용합니다. 'main.c'를'main' 함수로 먼저두면, 후속 라이브러리에서 링커가 링커를 찾지 못하게됩니다 (모든 소스 파일에 여러 개의 정의 된 심볼이 있다고보고합니다). –