2013-04-11 23 views
5

Trong ngữ cảnh của obstacle-ridden process khi cố gắng build Qt5 (32-bit) with VS 2012, tôi đã gặp phải lỗi xây dựng khác.Những gì hiện (thiết lập PATH = ...;% PATH:) = ^)%) có nghĩa là trong một kịch bản shell Windows, và làm thế nào tôi có thể vượt qua thất bại của dòng này trong bối cảnh của một xây dựng Qt5 nmake?

Đó là:

(set PATH = C: \ Users \ daniel347x \ Desktop \ Backup \ __ Dan_Root \ qt5 \ qtbase \ lib;% PATH:) = ^)%) & C: \ Users \ daniel347x \ Desktop \ Backup__Dan_Root \ qt5 \ qtbase \ bin \ uic.exe hộp thoại \ qfiledialog.ui -o ui_qfiledialog.h

nmake: gây tử vong lỗi U1077: '(bộ': mã trở lại '0xc0000135'

Dừng.

Tôi không thể tìm thấy bất kỳ nội dung nào liên quan đến vấn đề lỗi (set PATH=...;%PATH:)=^)%) (trả về mã lỗi 0xc0000135) khi tôi thực hiện tìm kiếm chi tiết Google/StackOverflow.

Lưu ý rằng nmake tiến hành trong một thời gian dài (hơn 1 giờ) chuyển đổi thư mục một cách vui vẻ, chạy tệp .exe trung gian và cả biên dịch và liên kết các tệp mã.

Tôi đang chạy nmake (cũng như đang chạy configure) trong lời nhắc lệnh Công cụ Visual Studio 2012 32 bit; và theo như tôi biết, tất cả các biến số path của tôi được đặt đúng (chúng bao gồm các đường dẫn đến 32 bit Perl và 32 bit Python, mặc dù tôi không nghĩ rằng đó là có liên quan ở đây).

Tôi đã khởi động lại máy tính và chạy lệnh công cụ VS 2012 với quyền quản trị viên (trong trường hợp đó là lỗi quyền), cố gắng chạy nmake và xảy ra lỗi tương tự.

Sau đó tôi đã cố gắng tìm ra lỗi thực sự là gì. Vào thời điểm đó, tôi trở nên bối rối bởi các cú pháp của câu lệnh dòng lệnh này mà dường như đang được thực hiện trong vòng một kịch bản shell Makefile-kích hoạt:

(set PATH=...;%PATH:)=^)%) 
        ^^^^^^ // What do the symbols :)=^)% mean? 

Tôi không hiểu những biểu tượng :) = ^)% trong ngữ cảnh của tập lệnh này.

Ai đó có thể cho tôi biết những biểu tượng này có ý nghĩa gì trong ngữ cảnh của tập lệnh shell Windows (được thực thi trong ngữ cảnh của nmake Makefile (xây dựng 32 bit Qt5 với VS 2012))?

Là câu hỏi tùy chọn được thêm vào, tôi có thể làm gì để khắc phục lỗi này và tiếp tục xây dựng Qt5 mà không có lỗi chặn này?

+1

Tôi tin rằng đó là những thao tác chuỗi trên biến đường dẫn, nhưng tôi không chắc chắn những gì họ đang làm cụ thể. – metalhead

+0

Nếu mục tiêu chỉ là để thêm một thư mục mới vào trước đường dẫn và không cần thao tác chuỗi, thì:> = ^)% có thể được thay thế bằng% kết quả (đặt PATH = ...;% PATH%) – GregA100k

+0

Tôi ngần ngại sửa đổi các kịch bản lệnh makefile Qt, ít nhất là không biết thao tác chuỗi thực sự đang làm gì. –

Trả lời

8

(set PATH=...;%PATH:)=^)%) là sự thay thế chuỗi. Tra cứu 'thay thế biến môi trường' trong đầu ra lệnh help set để biết thêm thông tin.

Kịch bản sẽ thêm biến PATH, nhưng trong khi thay thế nó sẽ thoát khỏi các dấu ngoặc vuông phù hợp để toàn bộ dòng được định dạng chính xác. Ví dụ,% PATH% có thể chứa một chuỗi con "Program Files (x86)" sẽ phá vỡ cú pháp set khi mở rộng. Biểu tượng ^ trước dấu ngoặc đơn chỉ là biểu tượng thoát hàng loạt.

Thứ hai, (...) & ... là một grouping operator cho phép nhiều lệnh được viết trên cùng một dòng. Tại sao tác giả kịch bản quyết định đặt hai lệnh trên cùng một dòng là không xác định với tôi, nhưng nó chắc chắn đã giúp che khuất lỗi.

Thứ ba, mặc dù NMAKE báo cáo lỗi cho lệnh 'set', kiểm tra nhanh đã chứng minh rằng mã trả về (% ERRORLEVEL%) được đặt bởi lệnh cuối cùng của nhóm, do đó không sử dụng googling 0xc0000135 lỗi cho SET và nmake lệnh

nguồn thực tế của lỗi là 'uic.exe', mà nằm ở:.

C:\Users\daniel347x\Desktop\Backup__Dan_Root\qt5\qtbase\bin\uic.exe 

về lỗi, 0xc0000135 - đây là The application failed to initialize properly lỗi của tôi. đoán là 'uic.exe' được tạo bằng chuỗi công cụ không tương thích/SDK hoặc yêu cầu một số tệp dll bị thiếu.

P.S. Một giải pháp thay thế: vấn đề tương tự has been solved bằng cách sử dụng jom thay vì nmake.

+2

... Mà ngay lập tức dẫn tôi đến điều tra 'uic.exe' bằng Dependency Walker, cho thấy rằng' icu' DLL bị thiếu, điều này cho thấy rằng mặc dù tôi đã thêm các đường dẫn 'include' và' lib' của ICU, đã không thêm đường dẫn thời gian chạy chứa DLL của ICU và vấn đề được giải quyết. Thật vậy, hệ thống kịch bản lệnh shell đã làm một công việc rất nghèo để xác định nguồn gốc của lỗi. –

+0

@DanNissenbaum bạn nên đặt hoặc yêu cầu thêm nhận xét của mình làm điều có thể để kiểm tra để giải quyết vấn đề này. Nó thực sự giúp tôi tiết kiệm rất nhiều thời gian. – BRabbit27

1

Tôi đã gặp vấn đề tương tự. Tôi quyết định thêm nó vào đường dẫn PATH đến thư viện icu.

0

Tôi đã gặp sự cố tương tự khi biên dịch Qt5.3 trong Win8. Giải pháp là đảm bảo bạn bao gồm vị trí nhị phân và openSSL 32-bin binaries trong biến PATH. Nếu bạn không uic.exe không hoạt động chính xác

0

Tôi đã gặp vấn đề tương tự, trong trường hợp của tôi, tôi đã sử dụng ICU được biên dịch kém (được biên dịch với VS2012) đang cố gắng sử dụng icu với VS2008, tôi giải quyết ICU với VS2008 và bằng cách sử dụng các phiên bản biên dịch của ICU trên dự án VS2008 của tôi.