2011-11-25 43 views
5

我目前正试图学习如何使用premake 4以将其应用于OpenGL sdk。我目前正在尝试制作一个Visual Studio 2010解决方案,该解决方案构建2个项目,一个是静态库,另一个包含一个主要源文件和主要方法。创建静态库并通过预制链接到它

这个项目非常简单,只是为了学习premake的目的。在名为Test的静态库项目中,我有2个文件,Test.h和Test.cpp。 Test.h包含print()方法的原型。 print()只是打印一行到控制台。使用premake,我将静态库链接到Main项目,并在main.cpp中包含了Test.h文件。我的问题是这样的:

 
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 

这里是我的代码在4个文件中,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的:在VS2010当我尝试建立我得到这个错误

#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; 
} 

如果你想知道为什么有一个残培()那里,在我的电脑上的控制台立即关闭,一旦它到达返回0,所以我使用的getch(),以应对这一问题,这迫使窗口等待用户按下另一个键。任何关于这个问题的建议都会很棒,因为我不确定问题是什么。如果它是简单的东西,请不要阉割我,我对premake和静态库很少有经验,这就是为什么我试图学习它们。

回答

9
links {"Test"} 

Lua不是Python。空白与Lua无关,就像空白对C++无关紧要。因此,您的links声明仅适用于"Release"配置。如果您希望它适用于整个项目,则需要在configuration声明之前执行,就像您的kind,files和其他命令一样。

Premake4以这种方式工作,因此您可以拥有某些仅用于"Release"构建(或调试或其他)的库。事实上,你可以将的任何project命令放在configuration之下。所以你可以拥有只在调试版本中使用的特定文件,或者其他的东西。

+0

这就是问题所在,但是现在我遇到了一个问题,当我尝试运行构建时,弹出窗口中显示:无法启动程序:'file_location \。\ Test.lib'指定的文件处于无法识别或不受支持的状态二进制格式。任何帮助? PS。我更改的是将Links {“Test”}移至语言正下方。 – user1032369

+0

@ user1032369:这是因为您正在尝试运行*库*,而不是可执行文件。更改当前的“启动项目”。 –

+0

所以我只能通过点击可执行文件来运行预制程序,我不能直接从VS运行它。 – user1032369