2010-06-30 45 views
11

Vì vậy, tôi đang cố gắng biên dịch ứng dụng cũ từ 32 bit sang 64 bit .. Tôi biên soạn lại tất cả các thư viện mà nó đã sử dụng và biến nó thành WIN SDK6.0A x64 bit cho libs ..Các biểu tượng bên ngoài chưa được giải quyết trong việc biên dịch ứng dụng 32 bit trong Windows 64

tôi đang sử dụng:

  • Visual Studio Professional Edition 2008
  • Visual C++
  • DotNet Framework 3.5 SP1
  • Windows server 2008R2
  • Windows SDK là 6.0A

Everythings cuối cùng sắp tới nhưng tôi nhận được các lỗi này biểu tượng không xác định lạ:

error LNK2019: unresolved external symbol InterlockedDecrement referenced in function ... 
error LNK2019: unresolved external symbol InterlockedIncrement referenced in function ... 
error LNK2019: unresolved external symbol GetModuleBaseName referenced in ... 
error LNK2019: unresolved external symbol EnumProcessModules referenced in ... 
error LNK2019: unresolved external symbol EnumProcesses referenced in ... 
error LNK2019: unresolved external symbol GetProcessMemoryInfo referenced 

Vấn đề là đây là tất cả giành chiến thắng cụ từ SDK. InterlockedDec và InterlockedInc đang đến từ kernel32.lib GetModuleBaseName, EnumProcessModules, EnumProcesses, GetProcessMemoryInfo là trong psapi.h mà còn kernel32.lib hoặc psapi.lib

Tôi đã kiểm tra C: \ Program Files \ Microsoft SDKs \ Windows \ v6 .0A \ Lib \ x64 và cả hai libs kernel32.lib và psapi.lib đều có.

Nó chắc chắn tìm kiếm các libs ở đúng vị trí. Tôi đã bật/VERBOSE: LIB và nó trỏ đến thư mục chính xác.

Vì vậy, tôi thực sự bối rối tại sao không phải là nó tìm thấy chúng.

Bất kỳ ý tưởng nào ???

Cảm ơn

Trả lời

13

Vì vậy, cuối cùng tôi figured it out, kinda ... Nó wasnt tìm psapi.lib

Trong dự án-> Linker-> bổ sung phụ thuộc thay vì chỉ nói psapi.lib Tôi đưa đường dẫn đầy đủ để nó và nó hoạt động ... không thực sự chắc chắn lý do tại sao nó không tìm thấy nó trước nhưng cũng ...

+6

Nếu bạn đang sử dụng msvc, bạn có thể sử dụng '#pragma comment (lib," psapi.lib ")' để thêm từ nguồn mã số –

+0

chờ đợi những gì w làm điều này [#pragma comment (lib, "psapi.lib")] làm ??? – grobartn

1

Đây là bắn rất dài (và tôi không thực sự tin rằng đây là nó) nhưng có lẽ tiêu đề không được bảo vệ với extern "C" đúng cách cho C++ biên dịch? Bạn có bao gồm các tiêu đề hệ thống hay chỉ tự khai báo các hàm?

+0

nope :(tất cả chúng đều có extern và tất cả mọi thứ .... – grobartn

+0

Bạn đã cố gắng xây dựng lại đầy đủ? Tôi nhận thấy VC + + được "nhầm lẫn" theo thời gian (nó có thể messes chương trình cơ sở dữ liệu) và xây dựng lại đầy đủ thường giúp. Tôi sẽ xóa tất cả * .obj, * .exe và * .pdb trước đó, chỉ trong trường hợp ... – Tomek

+0

đã làm điều đó quá nhiều lần không có gì. – grobartn

1

Bạn có thể gửi biên dịch và liên kết dòng lệnh của bạn, và bất kỳ # def trong mã của bạn?

Điều này xảy ra nếu bạn thực hiện một dự án đơn giản từ đầu mà chỉ gọi là một trong các phương pháp đó?

1

Đối với hồ sơ: Cùng một vấn đề, giải pháp khác nhau; Tôi đã có một mục nhập cho thư mục

psapi 

thêm vào trong danh sách các

Linker/General/Additional Library Directory 

Điều này dẫn đến việc sử dụng của người già psapi.lib nền tảng VS2005 sdk (nó chỉ có x86, không có phiên bản x64). Sau khi gỡ bỏ mục nhập, các lib chính xác từ WinSDK x64/psapi.lib đã cài đặt được sử dụng ngay bây giờ. Vì vậy, hãy chú ý đến việc trộn/đặt hàng cũ & SDK mới! Rõ ràng đường dẫn đầy đủ cũng sẽ hoạt động nhưng có thể là một vấn đề khi bạn sử dụng dự án trên nhiều máy.

0

Trong trường hợp của tôi (di chuyển từ VS2008 để VS2012), vấn đề giải quyết sau khi thêm psapi.lib trong Linker-> Input-> Dependencies bổ sung trong VS 2012.

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