2011-11-25 42 views
5

Tôi hiện đang cố gắng tìm hiểu cách sử dụng tiền tố 4 để áp dụng cho OpenGL sdk. Tôi hiện đang cố gắng để làm cho một giải pháp Visual Studio 2010 xây dựng 2 dự án, một là một thư viện tĩnh, khác chứa một tệp nguồn chính duy nhất, với phương pháp chính.Tạo thư viện tĩnh và liên kết với thư viện đó bằng tiền tố

Dự án này cực kỳ đơn giản và chỉ dành cho mục đích học tập. Trong dự án thư viện tĩnh, có tên là Test, tôi có 2 tệp, Test.h và Test.cpp. Test.h chứa nguyên mẫu cho phương thức print(). print() chỉ cần in một dòng vào giao diện điều khiển. Sử dụng tiền đề, tôi liên kết thư viện tĩnh với dự án Main, và trong main.cpp tôi đã bao gồm tệp Test.h. Vấn đề của tôi là thế này: trong VS2010 tôi nhận được lỗi này khi tôi cố gắng để xây dựng:

 
1>main.obj : error LNK2019: unresolved external symbol "void __cdecl print(void)" (? [email protected]@YAXXZ) referenced in function _main 
1>.\Main.exe : fatal error LNK1120: 1 unresolved externals 

Đây là mã của tôi trong 4 tác phẩm, các premake4.lua:

solution "HelloWorld" 
    configurations {"Debug", "Release"} 
project "Main" 
    kind "ConsoleApp" 
    language "C++" 
    files{ 
     "main.cpp" 

    } 
    configuration "Debug" 
     defines { "DEBUG" } 
     flags { "Symbols" } 

    configuration "Release" 
     defines { "NDEBUG" } 
     flags { "Optimize" } 
    links {"Test"} 
project "Test" 
    kind "StaticLib" 
    language "C++" 
    files{ 
     "test.h", 
     "test.cpp" 

    } 

Test.cpp:

#include <iostream> 

void print(){ 
    std::cout << "HELLO" << std::endl; 
} 

Test.h:

void print(); 

main.c pp:

#include <conio.h> 
#include "test.h" 
int main(){ 
    print(); 
    getch(); 
    return 0; 
} 

Nếu bạn đang tự hỏi tại sao có một getch() ở đó, trên máy tính của tôi giao diện điều khiển ngay lập tức đóng cửa khi nó đạt trở về 0, vì vậy tôi sử dụng getch() để chống lại rằng vấn đề, trong đó lực lượng cửa sổ đợi cho đến khi người dùng nhấn một phím khác. Bất kỳ lời khuyên nào về vấn đề này sẽ là tuyệt vời, bởi vì tôi đơn giản là không chắc chắn vấn đề là gì. Nếu nó là một cái gì đó đơn giản xin vui lòng không castrate tôi vào nó, tôi có rất ít kinh nghiệm với tiền đề và các thư viện tĩnh, đó là lý do tại sao tôi đang cố gắng để tìm hiểu chúng.

Trả lời

9
links {"Test"} 

Lua không phải là Python. Khoảng trắng không liên quan đến Lua, giống như khoảng trắng không quan trọng với C++. Vì vậy, tuyên bố links của bạn chỉ áp dụng cho cấu hình "Release". Nếu bạn muốn nó áp dụng cho toàn bộ dự án, nó cần phải đi trước câu lệnh configuration, giống như số kind, files và các lệnh khác của bạn.

Premake4 hoạt động theo cách này để bạn có thể có một số thư viện chỉ được sử dụng trong bản dựng "Release" (hoặc Gỡ lỗi hoặc bất kỳ thứ gì). Thật vậy, bạn có thể đặt hầu hết bất kỳproject lệnh nào theo số configuration. Vì vậy, bạn có thể có các tập tin cụ thể được sử dụng chỉ trong một xây dựng gỡ lỗi, hoặc bất cứ điều gì.

+0

Đó là vấn đề, tuy nhiên bây giờ tôi gặp sự cố khi tôi cố gắng chạy bản dựng, một cửa sổ bật lên có nội dung: Không thể bắt đầu chương trình: 'file_location \. \ Test.lib' Tệp được chỉ định không được nhận dạng hoặc không được hỗ trợ định dạng nhị phân. Bất kỳ trợ giúp với điều này? PS. Những gì tôi đã thay đổi đã di chuyển Liên kết {"Test"} sang phải bên dưới Ngôn ngữ. – user1032369

+0

@ user1032369: Đó là vì bạn đang cố gắng chạy * thư viện *, không phải tệp thực thi. Thay đổi "Dự án khởi động" hiện tại. –

+0

Vì vậy, tôi chỉ có thể chạy các chương trình tiền thưởng bằng cách nhấp vào tệp thực thi, tôi không thể chạy nó từ VS? – user1032369

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