저는 임베디드 시스템 (RTXC)에서 #define 명령을 통해 활성화 된 디버거 기능을 비활성화해야합니다. 그러나 #define을 undefine으로 변경하면 컴파일이 정상적으로 작동하지 않지만 링커가 실행되면 디버거 코드에 속하지 않은 심볼에 대한 오류가 발생합니다 (디버거 변수가 처리하지 않아야 함). 정의 됨). 사전 처리기 변수가 정의되지 않았거나 정의되지 않은 상태로 유지되도록 Make가 할 수있는 방법이 있습니까?변수를 정의 해제 할 수 있습니까?
답변
질문에 대한 답은 아니오입니다. 코드에서 #define 표현식으로 변수를 정의 할 수 없도록 절대적으로 설정할 수 없습니다.
당신은 애매한 문제가있는 것 같습니다. 그것은 당신의 Makefile에있는 버그, 철자가 틀린 지시어, 나쁜 매크로 (당신이 동어 반복을 용서한다면) 또는 사소한 것일 수 있습니다. 나는 숲을 태우는 것이 좋습니다. 문제가 끝날 때까지 모든 것을 잘라 낸 다음 숨어 있던 곳을 봅니다. HelloWorld에 도착하여 문제가 지속되면 저희에게 알려주십시오.
아니요. 코드에서 버그를 수정해야합니다.
더 구체적으로는 #ifdef 외부의 디버그 쪽을 참조하는 것이 있습니다. Make는 거기서 당신을 도울 수 없습니다.
또 다른 가능성은 .o 또는 이전 빌드에서 남겨진 것입니다. 빌드 트리를 정리하려고 할 수 있습니다.
불행히도 나는 그 두 가지를 모두 해왔고 연결 문제는 여전히 지속됩니다. 나는 변수의 모든 사용법을 점검하고 그것들이 모두 #ifdef 블록으로 묶여 있음을 보장했으며, 프로젝트에 의해 빌드 된 모든 마지막 a, o 및 so가 빌드 디렉토리에서 지워 졌는지 확인했다. 또는 신선한 내장). 그럼에도 불구하고 응답 해 주셔서 감사합니다. –
@Alex Marshall : 컴파일러는 불만족스러운 참조가 어디서 왔는지 알려주지 않습니다 (보통 첫 번째 위치). 개체 파일이나 라이브러리에서 'nm -g'를 실행하여 찾았습니까? –
@Jonathan Leffler : 저는 임베디드 OS 인 RTXC를 사용하고 있습니다. 컴파일러는 문제가 커널 라이브러리 librtxc.a 중 하나에서 발생한다고 알려줍니다. 'nm -g librtxc.a'는 참조가 rtxcasm.o에 있음을 알려줍니다. 라이브러리는 처음부터 다시 컴파일되고 CBUG 변수는 정의되지 않았지만 _isrcnt에 대한 참조는 그대로 유지됩니다. 내가 isrcnt에 대한 모든 참조를 확인했는데, 모두 #ifdef CBUG 태그로 적절히 묶여 있으므로 _isrcnt 심볼을 rtxcasm.o 오브젝트 파일로 컴파일해야하는 이유가 없습니다. 부수적으로, 'nm -g'에 감사드립니다. 나는 그것을 모르고있었습니다. –
- 1. ColdFusion에서 변수를 정의 해제 할 수 있습니까?
- 2. VS2005의 '정의 축소'설정을 해제 할 수 있습니까?
- 3. # 여러 매개 변수를 정의 할 수 있습니까?
- 4. Makefile에서 환경 변수를 "설정 해제"할 수 있습니까?
- 5. 어떻게 MS-DOS 변수를 정의 해제?
- 6. 인스턴스의 모든 필드를 할당 해제 (해제) 할 수 있습니까?
- 7. EXIT_SUCCESS의 정의를 해제 할 수 있습니까?
- 8. 변수를 사용하여 스택의 배열 크기를 c로 정의 할 수 있습니까?
- 9. FitNesse에서 변수를 다른 변수로 정의 할 수 있습니까?
- 10. Visual Studio 디버거에서 변수를 정의 할 수 있습니까?
- 11. C++에서 표현식에 변수를 정의 할 수 있습니까?
- 12. 클래스를 생성하기 전에 어떻게 변수를 정의 할 수 있습니까?
- 13. __init__.py를 사용하여 전역 변수를 정의 할 수 있습니까?
- 14. LINQPad에서 사용 가능한 개체 컨텍스트 변수를 정의 할 수 있습니까?
- 15. MongoDB 캐싱을 해제 할 수 있습니까?
- 16. Wakelock을 자동으로 해제 할 수 있습니까?
- 17. 구조체를 할당 해제 할 수 있습니까?
- 18. 종료 기능을 등록 해제 할 수 있습니까?
- 19. RabbitMQ에서 txAMQP 바인딩을 해제 할 수 있습니까?
- 20. NSProxy의 인스턴스를 자동으로 해제 할 수 있습니까?
- 21. '삭제'를 사용하여 'malloced'메모리를 해제 할 수 있습니까?
- 22. Scheme에서 변수 정의 해제 방법?
- 23. 어떻게 Clojure의에서 함수를 정의를 해제 할 수 있습니까?
- 24. 익명 형식을 어떻게 정의 할 수 있습니까?
- 25. ActionScript/Flex 3에서 (부호없는) 정수를 어떻게 해제 할 수 있습니까?
- 26. 해제 할 속성과 해제 할 속성은 무엇입니까?
- 27. 고유 변수를 문자열로 대체 할 수 있습니까?
- 28. 변수를 사용하여 메서드를 호출 할 수 있습니까?
- 29. GET에서 'execution'매개 변수를 제거 할 수 있습니까?
- 30. 파이썬에서 변수를 포맷 할 수 있습니까?
이 태그를 편집하십시오. "make", "define", "undef"는 좋은 SO 태그가 아닙니다. –
@Amr : define과 under에 동의하지만 make는 특정 도구를 참조하기 때문에 좋은 SO 태그입니다. – Brian