Đối với nền, tôi đã đi qua này porting một codebase Linux cỡ trung bình (biên dịch thành một khổng lồ .so) đến cửa sổ x64 (biên dịch thành một .dll). Tôi đã gặp rắc rối liên kết.Lỗi biểu tượng chưa được giải quyết trong DLL
Là một testcase tối thiểu, nếu tôi tạo một dự án Visual Studio từ các tập tin sau đây:
#include <Windows.h>
#include <Dbghelp.h>
void do_stuff(char const * s)
{
char buffer[4096];
long int len = UnDecorateSymbolName(
s,
buffer,
sizeof(buffer),
UNDNAME_COMPLETE);
}
Và tôi thiết lập các loại dự án để DLL và xây dựng nó, tôi nhận được một lỗi "LNK2001: Chưa giải quyết bên ngoài symbol __imp_UnDecorateSymbolName ". Tức là, tệp sẽ biên dịch đúng, nhưng không liên kết được thành một dll.
Tôi nghĩ mục tiêu là để dll của tôi liên kết với dbghelp.dll, đặc biệt là kể từ khi (ít nhất là trên hệ thống của tôi) không có tệp như dbshelp.lib. Vì vậy, tại sao nó đang cố gắng để giải quyết biểu tượng đó bây giờ, thay vì sau đó khi DLL của tôi được nạp vào một ứng dụng? Và tại sao nó không thể thấy hàm đó bằng cách nào?
Để rõ ràng, tôi đã xác nhận rằng tôi đang xây dựng DLL x64 và rằng dbghelp.dll trong C: \ Windows \ System32 là x64.
Nó vẫn cần phải liên kết với các thư viện dbghelp.lib nhập khẩu; điều này nên được bao gồm với Visual Studio, Platform SDK, vv – Luke