2014-12-18 6 views
2

일부 소스 (즉, ... \ Embarcadero \ Studio \ 15.0 \ source)를 수정하여 일부 버그를 수정하려고합니다. ... \ Embarcadero \ Studio \ 15.0 \ lib에있는 내용을 업데이트 할 수 있도록 어떻게 컴파일합니까?어떻게 델파이 XE7 런타임을 다시 컴파일합니까

+1

'lib'의 모든 내용은'source'에있는 내용으로 최신 상태입니다. 실제로 성취하려는 것은 무엇입니까? (왜 당신이 이것을 할 필요가 있다고 생각합니까?) –

+0

"lib에있는 모든 것이 소스에 최신 정보가 들어 있기 때문에"해당되지 않습니다. 수정하고 싶은 버그가 있으며 고정 소스의 개인용 사본을 관리하고 싶지는 않습니다. 과거의 어느 시점에서 X를 변경했다는 사실을 기억하고 피하는 더 좋은 제안이 없다면 라이브러리를 재구성하는 것이 가장 간단합니다. –

+1

두 가지 문제점이 있습니다. 1) 소스 파일이 체크섬과 일치하지 않기 때문에 향후 업데이트가 설치되지 않으며 2) 라이센스가 재 작성을 금지하기 때문에 나중에 런타임 패키지를 사용할 수 없게됩니다/재배포하므로 패키지를 사용하는 코드는 그렇지 않은 코드와 기능이 동일하지 않습니다. (세 번째가 있습니다. 앞으로 새로운 버전의 Delphi로 업그레이드하면 변경 사항을 새 버전에 다시 적용해야합니다.) 올바른 방법은 변경하려는 소스의 사본을 넣는 것입니다 귀하의 프로젝트 폴더에 복사하고 해당 사본을 수정하십시오. –

답변

13

델파이와 함께 제공되는 소스는 다시 컴파일 할 수 있지만 제품과 함께 제공되는 DCU (사전 컴파일 된 바이너리)는 사용할 수 없습니다. DCU 형식에는 특히 DCU가 소스의 재 컴파일로 대체되어서는 안됨을 나타내는 마커가 포함됩니다. 이 마커는 제품과 함께 배송 된 DCU에 대해서만 설정됩니다 (본인의 장치에서이 마커를 설정하는 메커니즘은 알지 못합니다).

이 때문에 DCU는 두 세트가 있습니다. 하나는 DEBUG 용이고 다른 하나는 비 디버그 빌드 용입니다. 따라서 프로젝트와 연결된 DCU 세트를 구체적으로 제어 할 수있는 프로젝트 옵션이있는 것입니다. 자신의 유닛은 당시의 컴파일러 설정에 따라 디버그 정보의 유무에 관계없이 컴파일됩니다. 그러나 제공된 RTL/VCL 유닛은 다시 컴파일되지 않으므로 미리 컴파일 된 것을 DEBUG로 사용할지 또는 사용하지 않을지를 선택해야합니다.

아직 나와 함께 있니? 좋은. :)

RTL/VCL 유닛을 다시 컴파일 할 수없는 이유는 심각한 위험을 초래하기 때문입니다. 디자인 타임 구성 요소 (제품과 함께 제공됨)를 포함하는 패키지는 특정 버전의 소스 (제품에 포함 된 버전)로 컴파일되며, 패키지 내용이 변경되면 패키지 내용이 더 이상 소스와 일치하지 않을 것입니다 디스크에 저장되므로 디버깅이 어려울 수 있습니다.

허용되는 경우에도 소스를 수정하여 달성 할 수있는 한계가 있음을 의미합니다. 예를 들어 게시 된 속성을 새로 도입하거나 기존 속성을 선언하거나 기존 속성의 선언 된 유형을 변경하면 관련된 구성 요소가 포함 된 기존 양식 파일의 지속성을 거의 깨뜨릴 수 없습니다.

그러나 모든 것을 말하면 선택적인 변경이 가능합니다.

트릭은 수정하려는 RTL/VCL 유닛의 복사본으로 프로젝트를 강제 컴파일하는 것입니다. 이를 달성하는 가장 간단한 방법은 DPR과 동일한 위치에 해당 유닛의 복사본을 배치하는 것입니다. 그러나보다 신뢰할 수있는 방법은 수정할 수있는 모든 유닛을 포함하는 별도의 특정 폴더를 유지하고 IDE 또는 특정 프로젝트의 검색 경로에이 폴더를 추가하는 것입니다.

당신은 변경은 할 수 없습니다하고 포함 된 유닛의 인터페이스 섹션을 수정하지해야한다는 것입니다 그러나 황금률를 관찰해야한다.

변경하면 프로젝트를 컴파일 할 때 수정하지 않은 다른 유닛이 수정 된 유닛에 연결하는 것을 거부합니다.

그러나이 규칙을 고수하고 단위의 구현 섹션 만 변경하는 한 확인해야합니다. 이러한 제약 속에서도, 당신이 염두에두고있는 버그의 일부를 고칠 수있는 충분한 범위가 있어야합니다.

물론 좀 더 복잡한 빌드 환경에서 살아야하며, 새로운 버전의 Delphi가 출시되면서 수정하는 RTL/VCL 유닛의 후속 릴리스에서 리비전을 병합 할 수도 있습니다. 이것이 당신의 경우에 가치가 있는지 여부는 정말로 당신이 다루고 자하는 버그가 얼마나 심각한가에 달려 있습니다.가능하다면 직접 버그를 수정하기보다는 버그를 다루는 것이 더 쉽습니다.

+0

내가 읽어야 할 때까지 내가봤을 때 "더 신뢰할만한 방법은 수정할 수있는 모든 장치가 들어있는 별도의 특정 폴더를 유지하고이 폴더를 IDE의 검색 경로에 추가하는 것입니다. 특정 프로젝트. " –

+0

@Deltics 매우 명확합니다. 감사합니다. –

관련 문제