我目前正在尝试学习如何使用 premake 4 以便将其应用到 OpenGLsdk http://www.opengl.org/sdk/。我目前正在尝试制作一个 Visual Studio 2010 解决方案,该解决方案构建 2 个项目,一个是静态库,另一个包含一个带有 main 方法的主源文件。
这个项目非常简单,仅用于学习 premake 的目的。在名为 Test 的静态库项目中,我有 2 个文件,Test.h 和 Test.cpp。 Test.h 包含方法 print() 的原型。 print() 只是将一行打印到控制台。使用 premake,我将静态库链接到 Main 项目,并在 main.cpp 中包含了 Test.h 文件。我的问题是这样的:在 VS2010 中,当我尝试构建时出现此错误:
1>main.obj : error LNK2019: unresolved external symbol "void __cdecl print(void)" (? print@@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"
}
测试.cpp:
#include <iostream>
void print(){
std::cout << "HELLO" << std::endl;
}
Test.h:
void print();
主要.cpp:
#include <conio.h>
#include "test.h"
int main(){
print();
getch();
return 0;
}
如果您想知道为什么那里有一个 getch() ,在我的计算机上,控制台一旦到达 return 0 就会立即关闭,所以我使用 getch() 来解决这个问题,这会强制窗口等待,直到用户按下另一个键。关于这个问题的任何建议都会很棒,因为我根本不确定问题是什么。如果它很简单,请不要阉割我,我对预制和静态库的经验很少,这就是我尝试学习它们的原因。