2011-12-02 22 views
5

Đã làm một sạch sẽ cài đặt trên một máy tính Windows 7 mới với:LNK4099 mối liên kết cảnh báo với sạch cài đặt của Qt SDK và Visual C++ 2008

  • Visual Studio 2008 SP1
  • Qt SDK 1.1.4

Sau đó, tôi đã tạo một dự án mới trong Qt Creator. Tôi đã chọn "Ứng dụng Qt Gui" trong "Dự án tiện ích Qt" và đã nhắm mục tiêu các máy tính để bàn bằng Visual C++ 2008, cả hai đều gỡ lỗi phát hành & (về cơ bản cài đặt mặc định).

Sau đó, tôi ép xây dựng, và có ....

qtmaind.lib(qtmain_win.obj):-1: warning: LNK4099: PDB 'vc90.pdb' was not 
found with 'c:\QtSDK\Desktop\Qt\4.7.4\msvc2008\lib\qtmaind.lib' or at 
'C:\Users\JamesJ\Desktop\QtTest-build-desktop-Qt_4_7_4_for_Desktop_- 
_MSVC2008__Qt_SDK__Debug\debug\vc90.pdb'; linking object as if no debug info 

tôi phải mất một cái gì đó rõ ràng - chắc chắn là kinh nghiệm out-of-box với Qt là không được phép liên quan đến cảnh báo trình biên dịch/mối liên kết? !?!

Làm cách nào để giải quyết cảnh báo trình liên kết này? Tôi thích điều trị cảnh báo như là lỗi, vì vậy ... Tôi muốn sửa lỗi này.

Trả lời

0

Không thể tìm thấy giải pháp cho điều này. Tôi chắc chắn biên dịch lại Qt sẽ giải quyết vấn đề, nhưng để đơn giản tôi muốn gắn bó với những gì được cài đặt với SDK cho bây giờ.

3

Đường dẫn đến vc90.pdb được nhúng trong qtmain_win.obj không phải là cùng một đường dẫn được đặt trong cài đặt trình liên kết của bạn.

mỗi hướng dẫn trong this article:

Trong cài đặt mối liên kết, Properties->Linker->Debugging->Generate Program Database File có giá trị $(TargetDir)$(TargetName).pdb.

Trong cài đặt C/C++, Properties->C/C++->Output Files->Program Database File nên cũng được thiết lập để $(TargetDir)$(TargetName).pdb (giá trị mặc định của nó là $(IntDir)\vc90.pdb).

Nếu không, bạn có thể thử làm sạch và xây dựng lại bản dựng Gỡ lỗi.

+2

Tôi đang sử dụng Trình tạo Qt chứ không phải Visual C++. Làm cách nào để đặt các cài đặt này trong Trình tạo Qt? –

+0

Bạn có thể vô hiệu hóa việc sử dụng các tệp '.pdb' (Tôi không tin rằng Qt Creator có thể sử dụng chúng) bằng cách đặt' QMAKE_CFLAGS_RELEASE =/Z7' trong 'qmake.conf' cho win32-msvc2008. Điều này nhúng tất cả thông tin gỡ lỗi vào tệp '.obj'. Nếu bạn cần sử dụng tệp '.pdb', hãy đảm bảo' qmake.conf' được thiết lập [như thế này] (http://developer.qt.nokia.com/faq/answer/how_to_build_pdb_for_release_version_of_qt) – Gnawme

+0

Bạn có đề xuất biên dịch lại không Qt? Không có cách nào để có được điều này làm việc đúng với các binaries out-of-the-box được cung cấp bởi Nokia trong Qt SDK? –

0

Thêm

QMAKE_LFLAGS += /ignore:4099

đến file .pro của bạn.

nếu bạn muốn không tạo PDB file cho thực thi hoặc thư viện của bạn thêm

QMAKE_CXXFLAGS += /Z7

vì vậy thông tin debug sẽ đưa vào file .obj.

Bạn có thể cần phải xóa tất cả Makefiles * để cập nhật quy tắc xây dựng. Được thử nghiệm trong Qt Creator 2.4.1 với MSVC 2008 SP1

+0

-1 Vô hiệu cảnh báo liên kết không giải quyết được sự cố. Giải pháp rất đơn giản: Sao chép tệp vc90.pdb đã được tạo khi xây dựng thư viện tĩnh qtmaind.lib vào cùng thư mục chứa qtmaind.lib. – IInspectable

1

Cài đặt riêng Thư viện Qt (4.8.2) và Trình tạo Qt (2.5.2) hoạt động tại đây. Tôi không còn nhận được cảnh báo LNK4099 nữa.

Đảm bảo xóa các cài đặt mà QtSDK để lại phía sau: các phím trong KHCU\Software\Nokia và thư mục %APPDATA%\Nokia.

Nâng cấp Thư viện QT theo cách thủ công trong trình quản lý gói QtSDK cũng có thể hoạt động.

0

Điều này xảy ra khi bạn di chuyển thư mục Qt (nghĩa là thư mục chứa libs/pdbs) vào một thư mục khác sau khi biên dịch. Đường dẫn đến tệp PDB được nhúng trong các thư viện, vì vậy khi bạn di chuyển chúng, trình liên kết không thể tìm thấy nó.

Dường như với tôi rằng vấn đề an toàn nhất/sạch nhất là xây dựng lại Qt ở vị trí mới.

Các vấn đề liên quan