2008-12-28 29 views
7

Tôi đang cố gắng sử dụng SDL trong C++ với Visual Studio 2008 Express. Các chương trình sau biên dịch nhưng không phải không liên kết:Làm thế nào để bạn có được một chương trình SDL tối thiểu để biên dịch và liên kết trong phòng thu trực quan 2008 express?

#include <SDL.h> 

int main(int argc, char *argv[]) 
{ 
    return 0; 
} 

Các lỗi liên kết là:

LINK : fatal error LNK1561: entry point must be defined 

tôi có được điều này bất kể như thế nào hoặc nếu tôi liên kết với SDL.lib và SDLmain.lib. Xác định mainmain() hoặc SDL_main() cho cùng một lỗi, có hoặc không có extern "C".

Chỉnh sửa: Tôi đã giải quyết vấn đề này bằng cách không bao gồm SDL.h trong main.cpp - việc tái cấu trúc tôi đã độc lập với vấn đề. Một giải pháp tương tự sẽ là #undef main ngay trước khi xác định hàm.

Trả lời

6

Tôi hiện không có VC++ nhưng tôi đã gặp vấn đề này nhiều lần.

Bạn cần tạo dự án Win32 thay vì dự án bảng điều khiển. Dự án Win32 mong đợi một hàm WinMain làm điểm nhập chương trình. SDLmain.lib chứa điểm vào này và tệp tiêu đề SDL_main.h có một macro sao lưu hàm chính của bạn thành SDL_main. Hàm này được gọi bởi điểm vào trong thư viện SDLmain.

Chức năng chính phải có chữ ký sau đây:

int main(int argc, char *argv[]) 

Nó cũng được yêu cầu phải bao gồm SDL.h trước khi tuyên bố chức năng chính của bạn, và bạn cần phải liên kết đến cả SDL.lib và SDLmain. lib.

Dường như bạn đang làm việc này. Vì vậy, tôi đoán là bạn có thiết lập dự án bảng điều khiển. Do đó, trình liên kết đang tìm kiếm một chức năng chính để gọi, nhưng nó được chuyển sang SDL_main bằng macro SDL_main.h. Vì vậy, mối liên kết không thể tìm thấy một điểm vào và bỏ cuộc!

+2

Có, thay đổi từ một ứng dụng cửa sổ (thông qua Thuộc tính dự án/Thuộc tính cấu hình/Trình liên kết/Hệ thống/Hệ thống con) hoạt động. Cảm ơn. (Tôi đã kết thúc với một giải pháp khác, mặc dù) –

0

Trình liên kết không thể tìm thấy điểm vào. Điều này có nghĩa là hàm main() của bạn không được nhận dạng là điểm vào.

Nếu bạn có tệp .def, hãy xóa tệp.

Ngoài ra, nếu bạn đã thiết lập dự án của mình để biên dịch với unicode và không phải là mbcs, bạn phải sử dụng wmain() thay vì main().

3

Đối với tôi nó đã góp phần thêm những dòng sau đây trước khi main():

#ifdef _WIN32 
#undef main 
#endif 

German Wikipedia cũng gợi ý thêm những dòng này thay vì:

#ifdef _WIN32 
#pragma comment(lib, "SDL.lib") 
#pragma comment(lib, "SDLmain.lib") 
#endif 

Mặc dù tôi vẫn có lỗi liên kết khi tôi đã cố gắng giải pháp thứ hai.

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